在 django 模型自定义 save() 方法中,您应该如何识别新对象? [英] In a django model custom save() method, how should you identify a new object?

查看:27
本文介绍了在 django 模型自定义 save() 方法中,您应该如何识别新对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在保存新记录(而不是更新现有记录)时触发 Django 模型对象的 save() 方法中的特殊操作.

I want to trigger a special action in the save() method of a Django model object when I'm saving a new record (not updating an existing record.)

检查 (self.id != None) 是否必要且足以保证 self 记录是新的并且不会被更新?这可能会忽略任何特殊情况吗?

Is the check for (self.id != None) necessary and sufficient to guarantee the self record is new and not being updated? Any special cases this might overlook?

推荐答案

更新: 澄清 self._state 不是私有实例变量,而是命名为避免冲突的方法,检查 self._state.adding 现在是更好的检查方式.

Updated: With the clarification that self._state is not a private instance variable, but named that way to avoid conflicts, checking self._state.adding is now the preferable way to check.

self.pk is None:

在新的 Model 对象中返回 True,除非该对象有一个 UUIDField 作为它的 primary_key.

returns True within a new Model object, unless the object has a UUIDField as its primary_key.

您可能需要担心的极端情况是,除 id 之外的字段是否存在唯一性约束(例如,其他字段的辅助唯一索引).在这种情况下,您可能仍有新记录在手,但无法保存.

The corner case you might have to worry about is whether there are uniqueness constraints on fields other than the id (e.g., secondary unique indexes on other fields). In that case, you could still have a new record in hand, but be unable to save it.

这篇关于在 django 模型自定义 save() 方法中,您应该如何识别新对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆