查询ManyToMany关系

问题描述:

我有一群属于组的站。每个站可以分成多个组。这是模型(简化):查询ManyToMany关系

class Station(models.Model): 
    name = models.CharField(max_length=4, blank=False, primary_key=True) 

    def __str__(self): 
     return "Station " + self.name 



class StationGroup(models.Model): 
    name = models.CharField(max_length=100, blank=False, primary_key=True) 
    stations = models.ManyToManyField(Station) 

    def __str__(self): 
     return "Station group " + self.name 

我怎样才能获得含有

  1. 站不在任何组
  2. 站是在N组
  3. 的列表/查询集十字路口,N工会集团的联盟与区别

(建议更好的试题标题欢迎)

没有在任何一组:

Station.objects.filter(stationgroup=None) 

在N组:

Station.objects.annotate(group_count=Count('stationgroup')).filter(group_count=N) 

路口/差异 - 有没有任何内置 - 在这样做的方式。一种可能性是简单地查询组,将它们转换为集合并在Python中进行比较。或者,你可以写自定义query expressions做你想做的。

要添加到丹尼尔的回答,让那些在任何组的列表的对象,你做

Station.objects.filter(stationgroup=g1).filter(stationgroup=g2).filter(stationgroup=g3) 

Docs Here