gpt4 book ai didi

python - 使用嵌套对象在 ModelViewSet 上发布 Django Rest Framework

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:04 28 4
gpt4 key购买 nike

我正在使用 django rest 框架构建 API。我有这些模型:

class Organisme(models.Model):
nom = models.CharField(max_length=255)
adresse = models.ForeignKey(Adresse, on_delete=models.CASCADE)

class Adresse(models.Model):
rue = models.CharField(max_length=255, blank=True)

这是我的模式 Organisme 的 View :

class OrganismeViewSet(viewsets.ModelViewSet):
queryset = Organisme.objects.all()
serializer_class = OrganismeSerializer
pagination_class = StandardResultsSetPagination
filter_backends = (filters.SearchFilter, DjangoFilterBackend)
filter_class = OrganismeFilter
search_fields = ('nom')

还有我的序列化器:

class OrganismeSerializer(serializers.ModelSerializer):
class Meta:
model = Organisme
fields = '__all__'
depth = 1

所以我试图通过发送以下内容来创建一个新的Organisme:

{
"adresse": {
"rue": "test"
},
"nom":"TestTest",
}

{
"adresse": pk_id,
"nom":"TestTest",
}

但我总是以这个错误结束:

IntegrityError at /organismes/
(1048, "Column 'adresse_id' cannot be null")

如果你们知道如何进行...在此先感谢您。

最佳答案

您需要重写create 方法来制作writable nested serializer :

class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Addresse
fields = ('rue',)

class OrganismeSerializer(serializers.ModelSerializer):
addresse = AddressSerializer()

class Meta:
model = Organisme
fields = '__all__'

def create(self, validated_data):
address_data = validated_data.pop('adresse')
address = Adresse.objects.create(**address_data)
organism = Organisme.objects.create(address=address, **validated_data)
return organism

关于python - 使用嵌套对象在 ModelViewSet 上发布 Django Rest Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51710053/

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