【发布时间】:2016-10-27 04:56:47
【问题描述】:
我有一个看起来像这样的模型:
class Pet(models.Model):
name = models.CharField(max_length=30)
description = models.CharField(max_length=200)
primary_contact = models.ForeignKey(Person)
我的序列化器如下所示:
class PetSerializer(serializers.ModelSerializer):
class Meta:
model = Pet
fields = ('id', 'name', 'description', 'primary_contact')
我的视图集:
class PetViewSet(viewsets.ModelViewSet):
queryset = Pet.objects.all()
serializer_class = PetSerializer
我的问题:
如果我在端点执行“GET”,我的结果如下所示:
[
{
"id": 1,
"name": "Ripley",
"description": "Black / Tan Yorkie",
"primary_contact": 1
}
]
primary_contact 只带回 Person 对象的 ID。这正是我希望 POSTing 结构的样子。当我发布时,我只想提供 Person 对象的 ID。但是,当我 GET 时,我希望内容看起来像这样:
[
{
"id": 1,
"name": "Ripley",
"description": "Black / Tan Yorkie",
"primary_contact": {
"id": 1,
"first_name": "MyFistName",
"last_name": "MyLastName",
"phone": "312-xxx-xxxx",
"email": "aarsan@abc123.com"
}
}
]
我可以通过在我的序列化程序中设置 depth=2 来获得上述结构,但是如果我尝试 POST,它会尝试创建 primary_contact,我不想这样做,因为它已经存在。
当我有外键时,我一直在使用的解决方法是为 POST 和 GET 创建不同的端点,我希望这不是唯一的方法。
【问题讨论】:
标签: python json django serialization django-rest-framework