2009-05-29 22 views
14

Tôi có hai lớp với mối quan hệ ManyToMany. Tôi muốn chọn một từ lớp đầu tiên và truy cập vào các trường của lớp liên quan. Có vẻ như điều này sẽ dễ dàng. Ví dụ:Trong Django, làm thế nào để bạn lấy một trường của một lớp liên quan nhiều đến nhiều?

class Topping(models.Model): 
    name = models.CharField(max_length=40) 

class Pizza(models.Model): 
    name = models.CharField(max_length=40) 
    toppings = models.ManyToManyField(Topping) 

Vì vậy, tôi muốn làm một cái gì đó như:

Pizza.objects.filter(name = 'Pizza 1')[0].toppings[0] 

Nhưng điều này không làm việc cho tôi. Cảm ơn vì bất kì sự giúp đỡ.

Trả lời

26

Hãy thử:

Pizza.objects.filter(name = 'Pizza 1')[0].toppings.all()[0] 

Nó làm việc cho tôi (mô hình khác nhau, nhưng ý tưởng là như nhau):

>>> Affiliate.objects.filter(first_name = 'Paolo')[0] 
<Affiliate: Paolo Bergantino> 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients 
<django.db.models.fields.related.ManyRelatedManager object at 0x015F9770> 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients[0] 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
TypeError: 'ManyRelatedManager' object is unindexable 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients.all() 
[<Client: Bergantino, Amanda>] 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients.all()[0] 
<Client: Bergantino, Amanda> 

Để biết thêm về lý do tại sao các công trình này, check out the documentation.

+0

Tuyệt vời. Cảm ơn bạn. – Mitch

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