![](/img/trans.png)
[英]Differentiate GET and POST in a ModelViewset Django Rest Framework
[英]POST on ModelViewSet with nested object Django Rest Framework
我正在使用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的視圖:
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
因此,我正在嘗試通過發送以下命令來創建一個新的有機體 :
{
"adresse": {
"rue": "test"
},
"nom":"TestTest",
}
要么
{
"adresse": pk_id,
"nom":"TestTest",
}
但是我總是會遇到這個錯誤:
IntegrityError at /organismes/
(1048, "Column 'adresse_id' cannot be null")
如果你們知道如何進行...預先謝謝。
您需要重寫create
方法以使可寫嵌套序列化器 :
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.