Django Rest Framework,如何更新序列化程序中的嵌套值

Django Rest Framework, How to update nested values in serializer

在 DRF 中,我想 post 批量交易到我的休息端点。

关于以下 Serializer 在 DFR 中为 transactions 创建值的嵌套字段的正确方法是什么?

您是否在 TransactionItemSerializer

为每笔交易 调用 create

调用save()里面的Transaction模型MasterSerializer自己创建>

例如:

class MasterSerializer(serializers.Serializer):

    transactions = TransactionItemSerializer(many=True)  # A nested list of 'transaction' items.

1。更新 MasterSerializer.

的交易
def create(self, validated_data):
    transactions = validated_data.pop('transactions')
    # for each transaction do Transaction Save()

2。以某种方式调用 TransactionItemSerializerMasterSerializercreate 方法为每个事务创建方法,即

  class MasterSerializer(serializers.Serializer):

    transactions = TransactionItemSerializer(many=True)
    
    class Meta:
        fields = ['transactions']

    def create(self, validated_data):
        transactions = validated_data.pop('transactions')
        # call create on for each transaction TransactionItemSerializer.create() here

假设您的模型名称是 'Transaction' 并且它有引用主交易的“master”字段,您可以这样做:

def create(self, validated_data):
    transactions = validated_data.pop('transactions', [])
    instance = super().create(validated_data)

    for transaction in transactions:
        Transaction.objects.create(master=instance, **transaction)

    instance.refresh_from_db()
    return instance