更新 DRF 中的多个嵌套对象

问题描述 投票:0回答:1

我有三个具有多对多字段关系的链接模型。

我不知道如何一次更新所有实例。

我想创建三个独立的序列化器,它可以更新三个实例。

class PlannedChargePriceSerializer(serializers.ModelSerializer):
    class Meta:
        model = ChargePrice
        fields = ['id', 'start', 'end', 'price']

class PlannedChargeSerializer(serializers.ModelSerializer):
    prices = PlannedChargePriceSerializer(many=True)

    class Meta:
        model = Charge
        fields = ['id', 'type', 'qtd', 'status', 'prices']

class PlannedSerializer(serializers.ModelSerializer):
    charges = PlannedChargeSerializer(many=True)

    class Meta:
        model = Planned
        fields = '__all__'
        read_only_fields = ['id', 'date', 'charges']

    def create(self, validated_data):
        charges_data = validated_data.pop('charges')
        planned = Planned.objects.create(**validated_data)

        for charge_data in charges_data:
            charge_prices_data = charge_data.pop('prices')
            charge = Charge.objects.create(planned=planned, **charge_data)

            for charge_price_data in charge_prices_data:
                ChargePrice.objects.create(charge=charge, **charge_price_data)

        return planned

    def update(self, instance, validated_data):
        # No idea how update multiple nested objects
        return instance
python django django-rest-framework
1个回答
0
投票

Django REST Framework 的文档中指出:

默认情况下,嵌套序列化器是只读的。如果您想支持对嵌套序列化器字段的写入操作,则需要创建

create()
和/或
update()
方法,以便显式指定应如何保存子关系。

简而言之,没有开箱即用的解决方案,您必须自己编写序列化器。

© www.soinside.com 2019 - 2024. All rights reserved.