Django DjangRest框架以外键显示模型
请原谅标题。我不太清楚如何在不展示的情况下问这个问题 在django,我有两个模型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
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
这两个答案都很好,但外国钥匙解决了问题。感谢两位伟大的回答,但外宾解决了问题。谢谢