我有三个具有多对多字段关系的链接模型。
我不知道如何一次更新所有实例。
我想创建三个独立的序列化器,它可以更新三个实例。
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
在 Django REST Framework 的文档中指出:
默认情况下,嵌套序列化器是只读的。如果您想支持对嵌套序列化器字段的写入操作,则需要创建
和/或create()
方法,以便显式指定应如何保存子关系。update()
简而言之,没有开箱即用的解决方案,您必须自己编写序列化器。