djangrestframework在外键中显示模型

时间:2017-11-23 18:58:51

标签: django python-3.x django-rest-framework

请原谅标题。我不太确定如何在不显示的情况下问这个问题。

在django我有两个模特。

#serializers.py

class VisitsSerializer(serializers.ModelSerializer):
    class Meta:
        model = visits
        fields=("id","person","date")

然后是restapi的序列化器。

{id:1,person:1,visitdate:11/23/17}

当API返回字典时,它看起来像这样。

{id:1,person:{id:1,name:foo,nickname:bar},visitdate:11/23/17}

有没有办法让API返回与id为1的人相关联的实际值?像这样。

{{1}}

3 个答案:

答案 0 :(得分:2)

尝试为People创建一个序列化程序类,然后将其添加到您的访问序列化程序中:

people = PeopleSerializer(read_only = True)

然后将它(人)添加到Meta类中的字段,只是一个建议,尝试将其作为外键而不是OnetoOne关系

答案 1 :(得分:1)

您可以使用嵌套关系执行此操作。这是一个例子:

class PersonSerializer(serializers.ModelSerializer):

    class Meta:
         model = people
         fields = ('name', 'nickname')

class VisitsSerializer(serializers.ModelSerializer):

    person = PersonSerializer(read_only=True)

    class Meta:
        model = visits
        fields = ("id", "person", "date")

有关嵌套序列化程序的文档为here

答案 2 :(得分:0)

对应的序列化器如下:

class PersonSerializer(serializers.ModelSerializer):
    class Meta:
         model = people


class VisitsSerializer(serializers.ModelSerializer):
    person = serializers.SerializerMethodField()

    class Meta:
        model = visits
        fields = ('id', 'person', 'date')

    def get_person(self, obj):
        return PersonSerializer(obj.person).data