ise*_*noe 4 django serialization django-rest-framework
在 DRF 视图集中自定义“create”方法或在序列化程序中自定义它有什么区别?我理解序列化器负责反序列化数据,即数据在 POST 查询中的呈现方式;但是,我也可以在序列化程序的相关字段中创建对象。
#views.py
def create(self, request):
pass
#serializer.py
def create(self, validated_data):
return Model.objects.create(**validated_data)
Run Code Online (Sandbox Code Playgroud)
我什么时候应该自定义视图/创建与序列化程序/创建?
create 视图集的方法此方法处理POST视图中的请求逻辑,默认情况下:
is_valid在序列化器上执行方法.save()序列化程序上的方法执行实际创建Response带有序列化数据和 201 状态的视图你真的不需要覆盖create视图集上的方法,如果你需要从视图本身发送到序列化程序,你可以覆盖perform_create默认情况下serializer.save()。例如。如果您想从请求中发送用户,您可以执行以下操作:
def perform_create(self, serializer):
# here you will send `created_by` in the `validated_data`
serializer.save(created_by=self.request.user)
Run Code Online (Sandbox Code Playgroud)
注意:幕后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
Run Code Online (Sandbox Code Playgroud)
所以在这里你要发送一个包含关于Parent对象的数据的有效负载,还有一个items包含它们表示的列表,所以现在该create方法还将创建 Items 并将它们与 Parent 实例链接。
总结一下:
| 归档时间: |
|
| 查看次数: |
2853 次 |
| 最近记录: |