覆盖视图内部和序列化器内部的update方法有什么区别?

时间:2019-08-07 17:59:30

标签: django django-rest-framework

我是django的新手,我知道这是一个幼稚的问题,但是我对于何时何时必须重写视图中的更新方法以及何时必须重写序列化器中的更新方法感到困惑?

1 个答案:

答案 0 :(得分:1)

从文档中:

1)在views中创建,更新:

  • perform_create(self, serializer)
  • perform_update(self, serializer)
  • perform_destroy(self, serializer)

    •   

      这些钩子对于设置隐式存在于请求中但不属于请求数据的属性特别有用。例如,您可以基于请求用户或基于URL关键字参数在对象上设置属性。

    •   

      这些替代点对于添加在保存对象之前或之后发生的行为(例如通过电子邮件发送确认或记录更新)也特别有用。

    •   

      您还可以通过引发ValidationError()来使用这些挂钩提供其他验证。如果您需要在数据库保存时应用一些验证逻辑,这将很有用。

2)在serializers中创建和更新:

  •   

    如果我们希望能够基于经过验证的数据返回完整的对象实例,则需要实现.create()和.update()方法之一或两者。

  •   

    如果您的对象实例与Django模型相对应,您还需要确保这些方法将对象保存到数据库中。

  • 您还可以覆盖nested operations的创建,更新方法。