2012-06-18 92 views
20

我有這些簡單的類Django的OneToOne反向接入

Class A(models.Model): 
    ... 

Class Meta(models.Model): 
    a = models.OnetoOneField(A, primary_key=True) 
    width = models.IntegerField(default=100) 

但是當我做

a = A() 
meta = Meta() 
a.save() 
meta.a = a 
meta.save() 
print a.meta.width 

我得到

'A' object has no attribute 'meta' 

這是爲什麼?我使用OneToOne錯誤嗎?如果是的話我怎樣才能得到正確的打印聲明?

由於

+10

不要使用Meta。它已經在Django的其他地方使用了。 –

+0

是的,Meta的使用相當混亂。你也使用Meta.a和a = A(),這增加了混淆 – user798719

回答

34

定義related_name調用反向存取。

a = models.OneToOneField(A, related_name='foobar') 
# ... 
a.foobar 
+7

你可以在沒有related_name的情況下使用a.meta而不是a.foobar。但絕對不要將模型稱爲「元」。 – northben