1

抱歉标题令人困惑,但我不知道如何更好地描述它。

我需要在 Django-Rest-Framework 中使用 PUT 编辑的对象上运行模型函数,该函数使用 PUT 中的一些新数据来计算应该保存在同一模型中的一些新值。

例子:

  • 一个项目{'amount': 2, 'price': 0, 'total': 0}已经存储在数据库中。
  • 然后,我使用 django-rest-framework 使用普通的 PUT 请求将价格更新为 1。
  • 该模型有一个辅助函数update_total(),我需要调用它来更新数据库中的总字段(在本例中为 2 (2*1))。
  • 该项目在数据库中更新,但从 django-rest-framework 返回的响应仍然显示total=0. 将对象放在 new 上后,total 将按预期为 2。

我需要来自 PUT 的响应中的响应为 2,而不是在重新抓取对象之后。但是怎么做?

我已经尝试了几件事(都不起作用):

  • 将验证器中的 attrs 更新为新值。
  • 使用post_save()inListCreateAPIView更新数据。
  • 使用pre_save()ListCreateAPIView
  • 更新实例restore_object()(即使不是为了这个目的)

这看起来像一个错误吗?或者还有什么技巧?

4

1 回答 1

1

我找到了一个解决方案,但感觉有点脏..

在我的序列化程序 restore_object 我把这样的代码:

new_values = instance.update_counters()
for k, v in new_values.items():
    self.data[k] = v

在我的模型 update_counters() 函数中,我返回了我更改的内容的字典。

于 2013-09-04T16:23:31.223 回答