【问题标题】:Django filter on multiple many-to-many rowsDjango过滤多个多对多行
【发布时间】:2016-06-19 05:59:06
【问题描述】:

我对 Django 很陌生,我在过滤多对多对象时遇到了问题。 我有一个多对多的关系

class Person(models.Model):
  name = models.CharField(max_length=128)

  def __unicode__(self):
      return self.name 
class Group(models.Model):
  name = models.CharField(max_length=128)
  members = models.ManyToManyField(Person, through='Membership')

  def __unicode__(self):
      return self.name
class Membership(models.Model):
  person = models.ForeignKey(Person)
  group = models.ForeignKey(Group)
  date_joined = models.DateField()
  invite_reason = models.CharField(max_length=64)

我可以过滤与单个组相关的人员

persons=Person.objects.filter(Q(group__name='Group1'))

但我想要实现的是过滤恰好在两个组中的人。

例子:

  • Person1 在 Group1 中
  • Person2 在 Group1 和 Group2 中。

过滤器应该只返回 Person2。

任何提示如何为此创建过滤器?

【问题讨论】:

  • 你想要any两个组中的人,还是特别是group1 + group2?
  • @DanielRoseman 不,我不希望任何这些群体中的人。我想要分配到这两个组或更多组的人。

标签: django many-to-many django-filter django-q


【解决方案1】:

我认为应该这样做......

groups = ["Group1","Group2"]
persons = Person.objects.annotate(count=Count('name')).filter(count__gte=len(groups)).filter(reduce(operator.or_, (Q(group__name=x) for x in groups)))

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 2011-01-14
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2018-06-07
    • 2012-09-26
    • 2015-07-18
    • 2020-06-18
    相关资源
    最近更新 更多