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