【问题标题】:Django REST Framework after PUT/PATCH actionPUT/PATCH 操作后的 Django REST 框架
【发布时间】:2019-07-29 22:45:52
【问题描述】:

我想在 api 的 PUT/PATCH 过程完成后执行一些操作。

我的 API 更新了一个模型的一些值,但在这些更新之后,我想更新另一个模型值,获取 API 发送的信息。

例如:

class Model1(models.Model):
    name = models.CharField(max_length=140)
    qty = models.IntegerField(default=0)

class Model2(models.Model):
    val = models.CharField(max_length=15)

我有这个模型,所以,我的 API 使用 PATCH 调用更新 Model1.qty 值。然后我想用我的 API 的 PATCH 调用的数据更新 Model2.val 值,实际上等于 Model1.qty 值

我不知道该怎么做,但我认为我应该重写“更新”方法。

def update(self, request, *args, **kwargs):
    ...??
def partial_update(self, request, *args, **kwargs):
    ...??

有什么想法吗?

注意我使用 HyperlinkedModelSerializers、ModelViewSets 和路由器来使我的 API 正常工作。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    视图上的post_save 方法正是出于这个原因而存在。 Django REST Framework 文档doesn't cover it well,但它是一个使用两个参数调用的钩子,obj(已保存的对象)和created(对于 POST/PUT-as-create,为 True,对于 PUT-为 False作为更新/补丁)。

    您可以通过self.request.DATA 访问发送的数据,这应该允许您修改保存的对象以满足您的需要。

    【讨论】:

      【解决方案2】:

      post_save 如前所述,现在 (>2.x) 已过时 (https://www.django-rest-framework.org/api-guide/generic-views/)。挂钩通用视图的新函数是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-30
        • 1970-01-01
        • 2019-03-24
        • 1970-01-01
        • 1970-01-01
        • 2019-07-14
        • 2017-02-15
        • 1970-01-01
        相关资源
        最近更新 更多