【发布时间】:2019-09-30 14:13:10
【问题描述】:
快速提问。无法在文档中找到它,或者存在相互矛盾的信息。
方法:
save(update_fields = somefields)
工作原理与方法相同:
SomeModel.objects.update(somefields here)
就这两种方法都在数据库级别工作而不触发模型中的 SAVE 方法而言?
UPDATE 适用于数据库级别,这很清楚
save(update_fields = somefields) 呢???
谢谢你,对相当抽象的问题感到抱歉
def delete(self, using=None, keep_parents=False):
self.show = False
self.change_date = datetime.datetime.now()
self.save(update_fields=["show", "change_date"]) # will it trigger save() method in the model or not???
【问题讨论】:
-
特别注意使用任何延迟字段获取实例时会发生什么。
Model.save做了一些有用但不如Manager.update明显的棘手事情。虽然不完全是同一个问题,this SO answer 有很多有用的信息。 -
调用
save方法会触发save方法。并且update_fields参数被传递给pre_save和post_save信号。无论您以何种方式调用save,它都会以save_base结尾。self.save(...) ... will it trigger save() method in the model是触发save方法的代码,不是吗? -
在 django 文档中说:“指定 update_fields 将强制更新”。这不清楚.. 在这种情况下它会使用 Manager.update() 还是只是标准的 save() 但具有有限的字段集?问题是带有 auto_add 的 datetimefield 不适用于 save(update_fields)。我只是认为这是因为 update_fields 在数据库级别上工作,在这种情况下,没有任何信号可能会以某种方式触发 auto_add。只是猜测
-
最后是更新还是插入。有一个
force_update选项。但是,当update_fields被传递时 - 将强制更新。
标签: django django-queryset django-orm