【问题标题】:Filter on ManyToManyField intermediate table fields过滤 ManyToManyField 中间表字段
【发布时间】:2013-03-14 01:23:39
【问题描述】:

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

【问题讨论】:

  • items = Item.objects.filter(customer_items__customer=customer, customer_items__item_count__gt = 0) 工作吗?
  • @Bibhas 似乎工作,请写一个答案

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


【解决方案1】:

这里-

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

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

【讨论】:

    【解决方案2】:

    这个呢?

    Customer.object.filter(customeritem__item_count__gt=0)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2020-02-01
      • 2023-03-05
      • 2022-11-25
      • 2018-07-25
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多