2017-10-09 236 views
0

我有一羣屬於組的站。每個站可以分成多個組。這是模型(簡化):查詢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工會集團的聯盟與區別

(建議更好的試題標題歡迎)

回答

2

沒有在任何一組:

Station.objects.filter(stationgroup=None) 

在N組:

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

路口/差異 - 有沒有任何內置 - 在這樣做的方式。一種可能性是簡單地查詢組,將它們轉換爲集合並在Python中進行比較。或者,你可以寫自定義query expressions做你想做的。

1

要添加到丹尼爾的回答,讓那些在任何組的列表的對象,你做

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

Docs Here