检查具有OneToOneField的对象是新建的还是已存在的

2 投票
2 回答
1159 浏览
提问于 2025-04-17 16:45

检查一个对象是否是新的常见方法是测试:

self.pk is not None

正如在Django模型自定义保存方法中,如何识别一个新对象?中所描述的那样。

但是,当这个对象与其他对象有一对一关系时,这种方法就不适用了,比如:

class X(models.Model):
     bla = models.OneToOneField(Bla)

那么如果我想创建这个对象实例并保存到数据库,我需要这样做:

x = X(bla=someBla)
x.save()

而且x.pk并不是空的,但x.pk从一开始就等于someBla.pk。

那么有没有办法检查这样的对象是新的还是被编辑过的呢?

2 个回答

-1

在这个情况下,self.pk 在保存方法中会是 None,但要确保你在调用父类的 save() 方法之前,先检查一下这个值。

1

这段代码是用来处理某些数据的。它的主要功能是从一个地方获取信息,然后对这些信息进行一些操作,最后把结果返回给用户。具体来说,它可能会读取文件、处理字符串或者与数据库进行交互。

在编程中,我们经常需要用到这样的代码块,因为它们可以帮助我们自动化一些重复的任务,节省时间和精力。

如果你对这段代码的具体细节感兴趣,可以尝试逐行分析,看看每一部分是如何工作的。这样可以帮助你更好地理解编程的基本概念。

new  =  not bool(X.objects.filter(pk=self.pk).count())

撰写回答