2013-02-22 95 views
1

检查对象是否是新的常见图案为正在测试:检查是否有OneToOneField对象是新的或者已经存在

self.pk is not None 

正如In a django model custom save() method, how should you identify a new object?

描述但当oject是不是真的在一到一个关系到一些其他的对象,说:

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

然后,如果我想创建该对象实例,并将其保存到数据库中,我有做这个:

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

x.pk不是null,而是x.pk = someBla.pk从一开始。

那么有没有任何可行性来检查这样的对象是新的还是编辑?

回答

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

在保存方法self.pk将无在这种情况下,但之前确保你正在检查这类X的save()方法

+0

高清调用super.save() save(self,force_insert = False,force_update = False,* args,** kwargs): print(“pk =%s”)%self.pk 从不显示无,所以不是这样。 – mnowotka 2013-02-22 12:16:50

+0

对不起,我的坏。为什么不使用ForeignKey和unique = True? [查看差异](http://stackoverflow.com/a/5891861/912039)。至于为什么会发生这种情况,根据该线程中的答案,OneToOneField表示组合,因此在实例化时分配相关对象的主键是有意义的。 – 2013-02-22 13:23:15

+0

因为我需要有更多的id列。我正在处理lagacy数据库,我不能将OneToOne更改为ForeignKey。 – mnowotka 2013-02-22 13:32:14