2012-06-18 28 views
20

Tôi có các lớp này đơn giảndjango OneToOne truy cập ngược

Class A(models.Model): 
    ... 

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

nhưng khi tôi làm

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

tôi nhận được

'A' object has no attribute 'meta' 

Tại sao điều này? Tôi đang sử dụng OneToOne sai? nếu vậy làm thế nào tôi có thể nhận được tuyên bố in chính xác?

Cảm ơn

+10

Không sử dụng Meta. Nó được sử dụng ở những nơi khác ở Django rồi. –

+0

có việc sử dụng Meta khá là khó hiểu. bạn cũng sử dụng Meta.a và a = A() để thêm vào sự nhầm lẫn – user798719

Trả lời

34

Xác định một related_name gọi accessor ngược lại.

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

Bạn có thể sử dụng a.meta thay vì a.foobar trong trường hợp không có một related_name. Nhưng chắc chắn không gọi một mô hình 'Meta'. – northben

Các vấn đề liên quan