Django DjangRest框架以外键显示模型

Django DjangRest框架以外键显示模型,django,python-3.x,django-rest-framework,Django,Python 3.x,Django Rest Framework,请原谅标题。我不太清楚如何在不展示的情况下问这个问题 在django,我有两个模型 class people(models.Model): name=models.TextField(max_length=100) nickname=models.TextField(max_length=100) class visits(models.Model): person=models.OneToOneField(people) visitdate=models.Da

请原谅标题。我不太清楚如何在不展示的情况下问这个问题

在django,我有两个模型

class people(models.Model):
    name=models.TextField(max_length=100)
    nickname=models.TextField(max_length=100)

class visits(models.Model):
    person=models.OneToOneField(people)
    visitdate=models.DateTimeField(auto_now=True)
然后是restapi的序列化程序

#serializers.py

class VisitsSerializer(serializers.ModelSerializer):
    class Meta:
        model = visits
        fields=("id","person","date")
当API返回字典时,如下所示

{id:1,person:1,visitdate:11/23/17}
有没有办法让API返回与id为1的人相关联的实际值?像这样

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

尝试为人员创建序列化程序类,然后将其添加到您的访问序列化程序:

people = PeopleSerializer(read_only = True)

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

尝试为人员创建序列化程序类,然后将其添加到您的访问序列化程序:

people = PeopleSerializer(read_only = True)

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

您可以使用嵌套关系来实现这一点。以下是一个例子:

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")

有关嵌套序列化程序的文档是。

您可以使用嵌套关系来实现这一点。以下是一个例子:

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")

嵌套序列化程序的文档是。

相应的序列化程序如下所示:

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

相应的序列化程序如下所示:

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

这两个答案都很好,但外国钥匙解决了问题。感谢两位伟大的回答,但外宾解决了问题。谢谢