我想在保存新记录(而不是更新现有记录)时,在Django模型对象的save()方法中触发一个特殊操作。
是检查(self。id != None)有必要且充分地保证自我记录是新的且没有被更新?有没有可能被忽略的特殊情况?
我想在保存新记录(而不是更新现有记录)时,在Django模型对象的save()方法中触发一个特殊操作。
是检查(self。id != None)有必要且充分地保证自我记录是新的且没有被更新?有没有可能被忽略的特殊情况?
当前回答
这是否适用于上述所有场景?
if self.pk is not None and <ModelName>.objects.filter(pk=self.pk).exists():
...
其他回答
这是常见的做法。
id将在第一次保存到db时给出
要知道您是在更新还是插入对象(数据),请在表单中使用self.instance.fieldname。在表单中定义一个干净的函数,并检查当前值项是否与前一个值项相同,如果不是,则更新它。
自我。Instance和self.instance.fieldname与新值进行比较
这是否适用于上述所有场景?
if self.pk is not None and <ModelName>.objects.filter(pk=self.pk).exists():
...
更新:与本人澄清。_state不是私有实例变量,但这样命名是为了避免冲突,检查self._state。加法现在是更好的检查方法。
self.pk is None:
在一个新的Model对象中返回True,除非对象有一个UUIDField作为它的主键。
您可能不得不担心的极端情况是,除了id之外的字段是否存在唯一性约束(例如,其他字段上的次要惟一索引)。在这种情况下,您可能仍然拥有一条新记录,但无法保存它。
用pk代替id:
if not self.pk:
do_something()