2016-03-05 82 views
0

我对Django来说很新颖,并且在多对多对象上过滤时遇到问题。 我有很多一对多的关系在多对多行上的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。

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

+0

你想在*任何*两组人,或特别组别1 +组2? –

+0

@DanielRoseman不,我不想让任何人参与其中。我希望分配给这两个或更多组的人员。 – Nisse

回答

0

我想这应该这样做...

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)))