首页 > 解决方案 > Django DRF 关注关系

问题描述

好吧,我正在尝试关注与 Django Rest Framework 的关系。

这是一个简化的模型:

class Model1(models.Model):
    name = models.CharField(max_length=20)
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

class Model2(models.Model):
    title = models.CharField(max_length=12, null=True, blank=True)
    model1 = models.ForeignKey(Model1, on_delete=models.CASCADE)

和序列化器:

class Model1Serializer(serializers.ModelSerializer):
    class Meta:
        model = Model1
        fields = '__all__'

class Model2Serializer(serializers.ModelSerializer):
    class Meta:
        model = Model2
        fields = '__all__'

从 Model2,我想访问所有者属性,例如电子邮件...

如果没有 DRF 和标准模板,我会这样做:

{{ instanceOfModel2.model1.owner.email }}

这将遵循关系。

您知道如何使用 Django DRF 实现这一目标吗?

我查看了https://www.django-rest-framework.org/api-guide/relations/ 但我想要的是相反的方式......而且我不想通过 REST API 公开 Django 用户模型……

标签: pythondjangodjango-rest-frameworkrelationship

解决方案


您可以使用点分表示法定义新字段以及source属性:

class Model2Serializer(serializers.ModelSerializer):
    email = serializers.EmailField(source='model1.owner.email', read_only=True)

    class Meta:
        model = Model2
        fields = '__all__'

推荐阅读