Python 嵌套字段序列化程序-缺少数据
Python 嵌套字段序列化程序-缺少数据,python,django,django-rest-framework,Python,Django,Django Rest Framework,嗨, 我无法理解所附主题的答案,因为序列化后缺少ID Model.py View.py 序列化程序.py 现在我发出以下请求: Request URL:http://localhost:9000/api/v1/cars Request Method:POST Request Paylod : { "name": "Car_test", "ower": { "id":1, "name": "Owner_test" } }
嗨, 我无法理解所附主题的答案,因为序列化后缺少ID
- Model.py
- View.py
- 序列化程序.py
现在我发出以下请求:
Request URL:http://localhost:9000/api/v1/cars
Request Method:POST
Request Paylod :
{
"name": "Car_test",
"ower": {
"id":1,
"name": "Owner_test"
}
}
但是,这里验证的_数据不包含所有者ID
回溯|本地变量
validated_data {u'Owner': OrderedDict([(u'name', u'Owner_test')]), u'name': u'Car_test'}
@凯文·布朗:
干得好!谢谢 我会验证你的答案,但我有一个新问题 现在,当我尝试放置新所有者时,出现一个错误:
{
"id": [
"This field is required."
]
}
我必须创建一个新的序列化程序?当Django REST Framework在后台创建字段时,模型上的任何
自动字段(即自动生成的id
键)默认设置为只读。您可以通过执行以下操作来确认这一点
repr(CarSerializer())
并查看使用read_only=True
set生成的字段。您可以覆盖它,这将允许您覆盖它并设置read\u only=False
class OwnerSerializer(serializers.ModelSerializer):
class Meta:
model = Owner
fields = ('id', 'name')
extra_kwargs = {
"id": {
"read_only": False,
"required": False,
},
}
当您需要时,这将包括id
字段在validated\u data
中。谢谢,您能再帮我一点吗?我编辑主题设置required=False
(更新了我的答案)。如果您有其他问题,我还建议您在堆栈溢出上创建新问题,以避免使现有答案无效。:)真的,你,罗克斯,我不知道我怎么会找到它!我也有同样的问题。应用了相同的逻辑,但serializer.is_valid()为false。在创建预约模型对象时,我对患者id和医生id具有foreignkey约束它在serializer.data中的两个外键id上都为null。这个id是在我实现了上述解决方案后显示的,但我猜它不接受patient对象和doctor对象,只接受int(id)。因此serializer.is_valid()的值为false,并且没有创建约会对象。我可以在预约表中用patient_id和doctor_id作为各自模型的外键实例创建对象吗?我猜您的意思是id=validated_data[“owner”][“id”]
,您的意思是LCVS=tmp_owner
。此外,获取所有者对象也不需要它。只需创建:car=car.objects.create(name=validated\u data['name'],lcv\u id=validated\u data[“owner”][“id”])
{
"id": [
"This field is required."
]
}
repr(CarSerializer())
class OwnerSerializer(serializers.ModelSerializer):
class Meta:
model = Owner
fields = ('id', 'name')
extra_kwargs = {
"id": {
"read_only": False,
"required": False,
},
}