2012-06-18 18 views
20

Ich habe diese einfache Klassendjango OneToOne Reverse-Zugang

Class A(models.Model): 
    ... 

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

aber wenn ich

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

i bekommen

'A' object has no attribute 'meta' 

Warum ist das? Benutze ich OneToOne falsch? Wenn ja, wie bekomme ich die richtige Druckanweisung?

Dank

+10

Verwenden Sie nicht Meta. Es wird bereits an anderer Stelle in Django verwendet. –

+0

ja die Verwendung von Meta ist ziemlich verwirrend. Sie verwenden auch Meta.a und a = A(), was zur Verwirrung beiträgt. – user798719

Antwort

34

definieren related_name die umgekehrte Accessor zu rufen.

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

Sie könnten a.meta anstelle von a.foobar verwenden, wenn kein related_name vorhanden ist. Aber nenne das Modell 'Meta' definitiv nicht. – northben

Verwandte Themen