过滤ManyToManyField中间表字段

时间:2013-03-24 14:58:59

标签: python django many-to-many django-orm

我有一个通常的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)。

2 个答案:

答案 0 :(得分:5)

这里 -

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

您已将related_name='customer_items'添加到Item外键。您可以通过CustomerItem访问与Item相关的item.customer_items。休息是小菜一碟。

答案 1 :(得分:1)

这是怎么回事?

Customer.object.filter(customeritem__item_count__gt=0)