Django Rest Framework, Как обновить вложенные значения в сериализаторе

В DRF я хотел бы публиковать массовые транзакции в конечную точку rest.

Как правильно создать вложенное поле значений для Serializer в DFR? transactions

Вызываете ли вы create для каждой транзакции на TransactionItemSerializer

ИЛИ

Вызов save() на модели Transaction внутри MasterSerializer create myself>

Например:

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 . Каким-то образом вызовите метод create из TransactionItemSerializer внутри метода MasterSerializer create для каждой транзакции, т.е.

  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
Вернуться на верх