過濾

2013-03-24 43 views
2

我在中間表的額外領域的常用M2M:過濾

class Customer(models.Model): 
    items = models.ManyToManyField(Item, verbose_name=u'Items', through='CustomerItem') 

class Item(models.Model): 
    pass 

class CustomerItem(models.Model): 
    item = models.ForeignKey(Item, related_name='customer_items') 
    customer = models.ForeignKey(Customer, related_name='customer_items') 
    item_count = models.PositiveIntegerField(default=0) 

我想與所有項目的查詢集爲給定的客戶那裏item_count > 0。到目前爲止我發現的唯一方法(從here)是篩選中間表,然後用Python代碼創建一個對象列表,但我需要一個查詢集(對於表格ChoiceField)。

+0

'items = Item.objects.filter(customer_items__customer = customer,customer_items__item_count__gt = 0)'是否有效? – 2013-03-24 15:14:09

+0

@Bibhas似乎工作,請寫回答 – wRAR 2013-03-24 16:07:05

+0

添加爲答案。 – 2013-03-24 16:53:20

回答

5

這裏 -

items = Item.objects.filter(customer_items__customer=customer, customer_items__item_count__gt = 0) 

當您添加related_name='customer_items'Item外鍵。您可以通過item.customer_items訪問與任何Item相關的CustomerItem。休息是小菜一碟。

1

這個怎麼樣?

Customer.object.filter(customeritem__item_count__gt=0)