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。以某种方式调用 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
在 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。以某种方式调用 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