一尘不染

在Django模型的自定义save()方法中,应该如何识别新对象?

django

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

(self.id!= None)的检查是否必要且足以确保自我记录是新记录且不会被更新?有什么特殊情况可能会忽略吗?


阅读 484

收藏
2020-03-28

共2个答案

一尘不染

澄清了self._state不是私有实例变量,而是以避免冲突的方式命名,self._state.adding现在检查是更可取的检查方法。

self.pk is None:

在新的Model对象中返回True,除非该对象的UUIDField为其primary_key

你可能要担心的极端情况是除id以外的其他字段是否存在唯一性约束(例如,其他字段上的辅助唯一索引)。在这种情况下,你仍然可以拥有新记录,但是无法保存它。

2020-03-28
一尘不染

self.pk我们可以检查self._state模型的另一种检查方法

self._state.adding is True 创造

self._state.adding is False 更新中

2020-03-28