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

判断(self.id!=None)是否有必要且足以保证Self记录是新的且不被更新?这里可能忽略的特殊情况是什么?

推荐答案

更新:澄清了self._state不是私有实例变量,但为避免冲突而这样命名,判断self._state.adding现在是首选的判断方式.


self.pk is None:

在新的Model对象中返回True,除非该对象的primary_keyUUIDField.

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

Django相关问答推荐

以特定顺序获取模型实例时出现问题

构造一个定制字符串(实体、年份和字母数字的组合)作为Django中的Postgres数据库的主键是否明智?

为什么 Django 在错误的目录中寻找模板?

dj_rest_auth 中的 PyTest 警告- RemovedInDjango40Warning: django.conf.urls.url() 已弃用,取而代之的是 django.urls.re_path()

如何在 Django REST Framework API 响应中使用多标签过滤器?

- 不支持的操作数类型:DateField和DateField

如何让两个模型相互引用 Django

Django:在模板中显示当前语言环境

Django Facebook Connect 应用推荐

如何在终端中切换 Python 版本?

通过 django shell 保存图像/文件

如何验证对象是否存在于多线程中

超过 1 个外键

Django REST Framework 和 FileField 绝对 url

带有 Django 和 Python 的 Atlassian Bamboo - 可能吗?

Django模型字段按变量

在 Django 中扩展 urlize

在 Django 中测试different layers的最佳实践是什么?

django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失

关闭 Django Rest Framework ModelViewSet 的自动分页