gpt4 book ai didi

django - View 集或序列化程序中的 DRF 创建方法

转载 作者:行者123 更新时间:2023-12-04 11:55:17 25 4
gpt4 key购买 nike

在 DRF View 集中自定义“create”方法或在序列化程序中自定义它有什么区别?我知道序列化器负责反序列化数据,即数据在 POST 查询中的呈现方式;但是,我也可以在序列化程序的相关字段中创建对象。

#views.py
def create(self, request):
pass

#serializer.py
def create(self, validated_data):
return Model.objects.create(**validated_data)
我什么时候应该自定义 View /创建与序列化程序/创建?

最佳答案

create View 集的方法
此方法处理 POST View 中的请求逻辑,默认情况下:

  • 使用请求中作为有效负载的任何数据实例化序列化程序
  • 执行了 is_valid序列化程序上的方法
  • 通过调用 .save() 执行实际的创建序列化器的方法
  • 返回 View Response带有序列化数据和 201 状态

  • 你真的不需要覆盖 create View 集上的方法,如果您需要从 View 本身发送到序列化程序,您可以覆盖 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)
    注:幕后 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他们的代表,所以现在 create方法还将创建 Items 并将它们与 Parent 实例链接起来。
    总结一下:
  • 在 viewset 中,create 方法处理请求-响应流
  • 在序列化程序中,create 方法使用经过验证的数据处理模型实例的创建。
  • 关于django - View 集或序列化程序中的 DRF 创建方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63630590/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com