查询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
我怎样才能获得含有
- 站不在任何组
- 站是在N组
- 的列表/查询集十字路口,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)