保存新记录(不更新现有记录)时,我想在Django模型对象的save()方法中触发特殊操作。
(self.id!= None)的检查是否必要且足以确保自我记录是新记录且不会被更新?有什么特殊情况可能会忽略吗?
澄清了self._state不是私有实例变量,而是以避免冲突的方式命名,self._state.adding现在检查是更可取的检查方法。
self._state
self._state.adding
self.pk is None:
在新的Model对象中返回True,除非该对象的UUIDField为其primary_key。
UUIDField
primary_key
你可能要担心的极端情况是除id以外的其他字段是否存在唯一性约束(例如,其他字段上的辅助唯一索引)。在这种情况下,你仍然可以拥有新记录,但是无法保存它。
self.pk我们可以检查self._state模型的另一种检查方法
self.pk
self._state.adding is True 创造
self._state.adding is True
self._state.adding is False 更新中
self._state.adding is False