簡體   English   中英

帶有嵌套對象Django Rest Framework的ModelViewSet上的POST

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM