在指定update_fields时使用pre_save

乔什·库珀什密特(Josh Kupershmidt)

我在MyModel上定义了一个pre_save,看起来像这样:

@receiver(pre_save, sender=MyModel)
def _mymodel_pre_save(sender, instance, **kwargs):
  if some_condition():
    instance.somecolumn = 'eggs'

也就是说,它希望能够修改MyModel实例的某些属性,当然希望这些更改在save()调用期间得以保留。我相信这是pre_save函数的典型用法。只要save()调用未指定update_fields,此方法就可以正常工作

我想知道此时是否有任何安全合理的方法在MyModel实例的save()调用中使用update_fields。如果我天真地打电话给:

myinstance = MyModel.objects.get(id=100)
myinstance.othercolumn = 'spam'
myinstance.save(update_fields=['othercolumn'])

生成的UPDATE语句如下所示:

UPDATE "myapp_mymodel" SET "othercolumn" = 'spam' WHERE "myapp_mymodel"."id" = 100

缺少pre_save中“ somecolumn”的预期更新。我猜可以通过查看pre_save函数(作为冻结集)可用的update_fields从pre_save内部检测到这种情况,但是我看不到有任何方法可以使pre_save强制在需要时进行预期的更改如上例所示,调用者具有更严格的update_fields集。还是有任何解决方法?

戴维

解决方法是:

@receiver(pre_save, sender=MyModel)
def _mymodel_pre_save(sender, instance, **kwargs):
  if some_condition():
    instance.somecolumn = 'eggs'
    instance.save()

注意额外的“ instance.save()”调用。

但是,必须在执行instance.somecolumn ='eggs'之后确保some_condition()不再为True。否则,将导致保存/预保存/保存/预保存调用的循环

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django .save()意外地处理update_fields输入

来自分类Dev

使用update_fields保存不会影响任何行(更改类时)

来自分类Dev

在Django中使用pre_save时取消保存模型

来自分类Dev

尝试使用pre_save方法填充必填字段

来自分类Dev

尝试使用pre_save方法填充必填字段

来自分类Dev

在pre_save信号中使用PIL调整图像大小

来自分类Dev

Django更改使用内联时调用pre_save post_save信号的顺序?

来自分类Dev

何时在Django中使用pre_save,保存,post_save?

来自分类Dev

Django pre_save不保存更改

来自分类Dev

如何使用pre_save信号检查django admin中是否选择了新文件?

来自分类Dev

传递参数Django信号-post_save / pre_save

来自分类Dev

Django pre_save signal - would an exception fail the transaction?

来自分类Dev

如何更改pre_save信号中的models.FileField?

来自分类Dev

在pre_save中获取表单数据

来自分类Dev

“ update_fields”是此函数的无效关键字参数

来自分类Dev

django 1.6为什么不只是'user.last_login = timezone.now()'和'user.save(update_fields = ['last_login'])'?

来自分类Dev

Django 1.6为什么不只是'user.last_login = timezone.now()'和'user.save(update_fields = ['last_login'])'?

来自分类Dev

Django:将变量从pre_save传递到post_save信号

来自分类Dev

信号 Post_Save 和 Pre_Save 出错:创建和自我!怎么修?

来自分类Dev

将 pre_save 信号更改为 post_save?Django

来自分类Dev

Django pre_save信号:我怎么知道它是插入还是更新

来自分类Dev

Django pre_save信号-异常会导致交易失败吗?

来自分类Dev

Django REST框架,pre_save()和serializer.is_valid(),它们如何工作?

来自分类Dev

Django pre_save信号:我怎么知道它是插入还是更新

来自分类Dev

django用户update_fields没有出现在信号中

来自分类Dev

使用 Pre/Save 中间件 Mongoose 模型方法时获取文档 ID

来自分类Dev

猫鼬的Pre-Save Hook正在触发,但未保存其他字段(不使用model.update)

来自分类Dev

在“ INSERT ON DUPLICATE KEY UPDATE”中,检测在指定插入值时是否使用默认值

来自分类Dev

为什么使用update_attributes或save时ActiveRecord会验证Model的所有列

Related 相关文章

  1. 1

    Django .save()意外地处理update_fields输入

  2. 2

    使用update_fields保存不会影响任何行(更改类时)

  3. 3

    在Django中使用pre_save时取消保存模型

  4. 4

    尝试使用pre_save方法填充必填字段

  5. 5

    尝试使用pre_save方法填充必填字段

  6. 6

    在pre_save信号中使用PIL调整图像大小

  7. 7

    Django更改使用内联时调用pre_save post_save信号的顺序?

  8. 8

    何时在Django中使用pre_save,保存,post_save?

  9. 9

    Django pre_save不保存更改

  10. 10

    如何使用pre_save信号检查django admin中是否选择了新文件?

  11. 11

    传递参数Django信号-post_save / pre_save

  12. 12

    Django pre_save signal - would an exception fail the transaction?

  13. 13

    如何更改pre_save信号中的models.FileField?

  14. 14

    在pre_save中获取表单数据

  15. 15

    “ update_fields”是此函数的无效关键字参数

  16. 16

    django 1.6为什么不只是'user.last_login = timezone.now()'和'user.save(update_fields = ['last_login'])'?

  17. 17

    Django 1.6为什么不只是'user.last_login = timezone.now()'和'user.save(update_fields = ['last_login'])'?

  18. 18

    Django:将变量从pre_save传递到post_save信号

  19. 19

    信号 Post_Save 和 Pre_Save 出错:创建和自我!怎么修?

  20. 20

    将 pre_save 信号更改为 post_save?Django

  21. 21

    Django pre_save信号:我怎么知道它是插入还是更新

  22. 22

    Django pre_save信号-异常会导致交易失败吗?

  23. 23

    Django REST框架,pre_save()和serializer.is_valid(),它们如何工作?

  24. 24

    Django pre_save信号:我怎么知道它是插入还是更新

  25. 25

    django用户update_fields没有出现在信号中

  26. 26

    使用 Pre/Save 中间件 Mongoose 模型方法时获取文档 ID

  27. 27

    猫鼬的Pre-Save Hook正在触发,但未保存其他字段(不使用model.update)

  28. 28

    在“ INSERT ON DUPLICATE KEY UPDATE”中,检测在指定插入值时是否使用默认值

  29. 29

    为什么使用update_attributes或save时ActiveRecord会验证Model的所有列

热门标签

归档