gpt4 book ai didi

python - 嵌套字段序列化程序 - 数据丢失

转载 作者:太空狗 更新时间:2023-10-30 00:26:26 27 4
gpt4 key购买 nike

Related to this Topic


你好,我无法按照所附主题的答案进行操作,因为序列化后缺少 ID

  • 模型.py

class Owner(models.Model):
name = models.CharField(db_index=True, max_length=200)

class Car(models.Model):
name = models.CharField(db_index=True, max_length=200)
LCVS = models.ForeignKey(Owner)
  • View.py

class OwnerViewSet(viewsets.ModelViewSet):
queryset = Owner.objects.all()
serializer_class = OwnerSerializer

class CarViewSet(viewsets.ModelViewSet):
serializer_class = CarSerializer
queryset = Car.objects.all()
  • Serializer.py

class OwnerSerializer(serializers.ModelSerializer):
class Meta:
model = Owner
fields = ('id', 'name')

class CarSerializer(serializers.ModelSerializer):
owner = OwnerSerializer()

class Meta:
model = Car
fields = ('id', 'name', 'owner')

def create(self, validated_data):
tmp_owner = Owner.objects.get(id=validated_data["car"]["id"])
car = Car.objects.create(name=self.data['name'],owner=tmp_owner)
return car

现在我发送以下请求:

Request URL:http://localhost:9000/api/v1/cars
Request Method:POST
Request Paylod :
{
"name": "Car_test",
"ower": {
"id":1,
"name": "Owner_test"
}
}

但是,这里的 validated_data 不包含所有者 ID!

回溯 |本地变量

 validated_data {u'Owner': OrderedDict([(u'name', u'Owner_test')]), u'name': u'Car_test'} 

@凯文·布朗:
工作!谢谢我会验证你的答案,但我遇到了一个新问题......

现在,当我尝试放置一个新所有者时,出现错误:

{
"id": [
"This field is required."
]
}

我必须创建一个新的序列化程序吗?

最佳答案

当 Django REST Framework 在中创建字段时,模型上的任何 AutoField(这是自动生成的 id 键)默认设置为只读的背景。您可以通过执行以下操作来确认这一点

repr(CarSerializer())

并查看设置了 read_only=True 的字段。您可以覆盖此 with the extra_kwargs Meta option这将允许您覆盖它并设置 read_only=False

class OwnerSerializer(serializers.ModelSerializer):

class Meta:
model = Owner
fields = ('id', 'name')
extra_kwargs = {
"id": {
"read_only": False,
"required": False,
},
}

这将在您需要时将 id 字段包含在 validated_data 中。

关于python - 嵌套字段序列化程序 - 数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27858184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com