Django Rest Framework,如何更新序列化程序中的嵌套值
Posted
技术标签:
【中文标题】Django Rest Framework,如何更新序列化程序中的嵌套值【英文标题】:Django Rest Framework, How to update nested values in serializer 【发布时间】:2022-01-22 00:42:51 【问题描述】:在 DRF 中,我想将批量交易发布到我的休息端点。
在以下Serializer
中,在 DFR 中为 transactions
创建嵌套值字段的正确方法是什么?
您是否在TransactionItemSerializer
create
或
在MasterSerializer
创建自己的Transaction模型上调用save()
>
例如:
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
内的create
方法MasterSerializer
为每个事务创建方法,即
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
【问题讨论】:
【参考方案1】:假设您的模型名称是“交易”并且它有“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
【讨论】:
我明白了。 Transaction.objects.create 会调用什么?模型创建还是转换 ModelSerializer 上的创建方法? 它将调用模型的create
方法,您不需要后者,因为数据已经通过序列化程序进行了验证,您可以简单地使用validated_data 使用模型的@987654324 创建一个新对象@
我的主人Serialize
有这个字段...transactions = TransactionSerializer(many=True) By calling the model to create as suggested above, would this not bypass the
TransactionSerializer` 创建?希望这不是愚蠢的问题,我试图更好地理解这一点。 ps TransactionSerializer 是一个ModelSerializer
可能是上面的 insetad,这样做会更好吗?...`transaction_serializer = TransactionSerializer(data=transactions, many=True)`
是的,你可以这样做,如果你引用TransactionSerializer
中的主事务没有问题,那为什么不呢?以上是关于Django Rest Framework,如何更新序列化程序中的嵌套值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Postman 表单数据在 Django REST Framework 中发布嵌套数组?
django-rest-framework:如何序列化已经包含 JSON 的字段?
如何仅使用 django 作为后端并使用 django-rest-framework 发布
如何在 django-rest-framework 中为 API 使用 TokenAuthentication