2017-10-09 16 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. ステーションNグループ
  2. である
  3. ステーションを含むリスト/クエリセットを取得することができますN stationGroupの交差点、結合点、および相違点

答えて

2

ない任意のグループに(より良い質問タイトルのための提案は歓迎されている):

Station.objects.filter(stationgroup=None) 

Nグループに:

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

交差点/差異 - 任意の組み込みがありません - これを行う方法。 1つの可能性は、単にグループを照会し、それらをセットに変換し、Pythonで比較を行うことです。または、あなたが望むことを行うためにカスタムquery expressionsと書くことができます。

1

グループのリストのいずれかであるオブジェクトを取得するには、ダニエルの答えに追加するには、

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

Docs Here

を行います
関連する問題