使用嵌套对象Django Rest Fram在ModelViewSet上发布

2024-09-28 03:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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)

这是我的模式组织的视图

^{pr2}$

以及我的序列化程序:

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")

如果你们知道怎么做。。。先谢谢你。在


Tags: djangorestidmodelmodelsnomlengthmax
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:28

您需要重写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 

相关问题 更多 >

    热门问题