2012-06-18 17 views
20

ho questi semplici classidjango OnetoOne accesso inverso

Class A(models.Model): 
    ... 

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

ma quando lo faccio

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

ottengo

'A' object has no attribute 'meta' 

Perché è questo? Sto usando OneToOne sbagliato? in tal caso, come posso ottenere la dichiarazione di stampa corretta?

Grazie

+10

Non utilizzare Meta. È già usato altrove in Django. –

+0

sì, l'uso di Meta è piuttosto confuso. usi anche Meta.a e a = A() che aggiungono alla confusione – user798719

risposta

34

Definire un related_name di chiamare la funzione di accesso inverso.

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

Puoi usare a.meta invece di a.foobar in assenza di related_name. Ma sicuramente non chiamare un modello "Meta". – northben

Problemi correlati