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,
            },
        }