2012-06-18 23 views
20

tengo estas clases simplesDjango OneToOne acceso inverso

Class A(models.Model): 
    ... 

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

pero cuando lo hago

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

me sale

'A' object has no attribute 'meta' 

¿Por qué es esto? ¿Estoy usando OneToOne mal? en caso afirmativo, ¿cómo puedo obtener la declaración de impresión correcta?

Gracias

+10

No utilice Meta. Ya se usa en otras partes de Django. –

+0

sí, el uso de Meta es bastante confuso. también usa Meta.a y a = A() lo que se suma a la confusión – user798719

Respuesta

34

definir un related_name llamar el descriptor de acceso inverso.

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

. Podría usar a.meta en lugar de a.foobar en ausencia de un nombre relacionado. Pero definitivamente no llame a un modelo 'Meta'. – northben