我有一堆属于小组的电台。每个站可以分为多个组。这是模型(简化):
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
如何获取包含
的列表/查询集
(欢迎提出更好的问题标题的建议)
答案 0 :(得分:2)
不在任何群组中:
Station.objects.filter(stationgroup=None)
在N组中:
Station.objects.annotate(group_count=Count('stationgroup')).filter(group_count=N)
交叉/差异 - 没有任何内置方法可以做到这一点。一种可能性是简单地查询组,将它们转换为集合并在Python中进行比较。或者,您可以编写自定义query expressions来执行您想要的操作。
答案 1 :(得分:1)
要添加丹尼尔的回答,要获取任何群组列表中的对象,您可以
Station.objects.filter(stationgroup=g1).filter(stationgroup=g2).filter(stationgroup=g3)