2012-06-18 5 views
20

У меня есть эти простые классыДжанго 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

Не используйте Мета. Он уже используется в другом месте в Django. –

+0

Да, использование Meta довольно запутанно. вы также используете Meta.a и a = A(), которые добавляют к путанице. – user798719

ответ

34

Определение related_name вызвать обратный аксессор.

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

Вы можете использовать a.meta вместо a.foobar в отсутствие родственного_имя. Но определенно не называйте модель «Мета». – northben

Смежные вопросы