在PUT中更改模型对象,并在django-rest-framework中更新GET之前

时间:2013-09-04 15:11:50

标签: django django-rest-framework

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

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

示例:

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

我需要在PUT的响应中响应为2,而不是在对象的重新调整之后。但是如何?

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

  • 将验证程序中的attrs更新为新值。
  • 使用post_save()中的ListCreateAPIView更新数据。
  • pre_save()
  • 中使用ListCreateAPIView
  • 更新restore_object()中的实例(即使不是为此目的)

这看起来像个bug吗?还是有另一招?

1 个答案:

答案 0 :(得分:1)

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

在我的序列化程序restore_object中,我放了这样的代码:

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

在我的模型update_counters()函数中,我正在返回一个我改变的词典..