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)

我想获得一个查询集,其中包含给定客户的所有项目 where item_count > 0。到目前为止(从这里)我发现的唯一方法是过滤中间表,然后用 Python 代码制作一个对象列表,但我需要一个查询集(用于表单ChoiceField)。

4

2 回答 2

6

这里 -

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

正如您添加related_name='customer_items'Item外键一样。您可以通过 访问与CustomerItem任何相关的内容。休息是小菜一碟。Itemitem.customer_items

于 2013-03-24T16:52:56.000 回答
2

那这个呢?

Customer.object.filter(customeritem__item_count__gt=0)
于 2013-03-24T15:14:11.737 回答