在DRF视图集中自定义“创建”方法或在序列化程序中自定义方法有什么区别?我了解串行器负责反序列化数据,即在POST查询中呈现数据的方式;但是,我也可以在序列化程序的相关字段中创建对象。
index.js?1dce:614 Uncaught (in promise) TypeError: Cannot read property 'super' of undefined
何时应该自定义视图/创建与序列化器/创建?
答案 0 :(得分:2)
create
方法此方法处理视图中的POST
请求逻辑,默认情况下会这样做:
is_valid
方法.save()
方法来执行实际创建Response
您实际上并不需要在视图集上覆盖create
方法,如果您需要从视图本身将其发送给序列化程序,则可以覆盖perform_create
,默认情况下会覆盖{{ 1}}。例如。如果您想从请求中发送用户,则可以执行以下操作:
serializer.save()
注意:在后台 def perform_create(self, serializer):
# here you will send `created_by` in the `validated_data`
serializer.save(created_by=self.request.user)
方法将在save
序列化程序上执行create
方法
validated_data
方法此方法仅使用create
创建实际的模型实例。如果需要创建相关对象,则可以重写此方法,如下所示:
validated_data
因此,您在此处发送的有效载荷不仅包含与 def create(self, validated_data):
items_data = validated_data.pop('items')
# similar to Parent.objects.create(**validated_data)
parent = super().create(**validated_data)
for item_data in items_data:
Item.objects.create(parent=parent, **item_data)
return parent
对象有关的数据,而且还包含Parent
及其代表的列表,因此现在items
方法还将创建Items和链接它们与Parent实例。
总结一下: