2016-03-05 91 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)))