2013-02-22 97 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