检查是否有OneToOneField对象是新的或者已经存在
问题描述:
检查对象是否是新的常见图案为正在测试:检查是否有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从一开始。
那么有没有任何可行性来检查这样的对象是新的还是编辑?
答
new = not bool(X.objects.filter(pk=self.pk).count())
答
在保存方法self.pk
将无在这种情况下,但之前确保你正在检查这类X的save()方法
高清调用super.save() save(self,force_insert = False,force_update = False,* args,** kwargs): print(“pk =%s”)%self.pk 从不显示无,所以不是这样。 – mnowotka 2013-02-22 12:16:50
对不起,我的坏。为什么不使用ForeignKey和unique = True? [查看差异](http://*.com/a/5891861/912039)。至于为什么会发生这种情况,根据该线程中的答案,OneToOneField表示组合,因此在实例化时分配相关对象的主键是有意义的。 – 2013-02-22 13:23:15
因为我需要有更多的id列。我正在处理lagacy数据库,我不能将OneToOne更改为ForeignKey。 – mnowotka 2013-02-22 13:32:14