DjangoでのN対Nのデータ取得方法についてです。
下記のようなテーブル構成があるとします。(作成しているものと名称は異なりますが、テーブル構成は同じです)
XXX大学の学生XXXが聴講している講義全てを取得するSQLを発行したいです。
このERで全テーブル結合して取得してくる方法をご教授頂きたいです。
試したこと
①select_relatedで取得
②prefetch_relatedで取得
クラス名を下記とします。
大学:University
学生:Student
講義:Course
models.pyで多対多は下記の様に実装しています
python
1class Course 2 course = models.CharField(max_length=30) 3 4 5class Student 6 university = models.ForeignKey(University, on_delete=models.CASCADE) 7 name = models.CharField(max_length=30) 8 course = models.ManyToManyField(Course)
①select_relatedで取得
python
1student_list = University.objects.all().select_related()
としましたが講義名の取得ができませんでした。
②prefetch_relatedで取得
select_realatedは1対Nの関係までしか取得しないとのことなので、prefetch_related()メソッドを使用しました。
python
1student_list = University.objects.all().prefetch_related()
としましたが、取得結果は①と変わりませんでした。
参考
・QuerySet API reference
https://docs.djangoproject.com/ja/2.1/ref/models/querysets/
・Djangoでprefetch_relatedを便利に使う
https://qiita.com/shunsukeaihara/items/eaaace97f6db75355f95
・Django ORM の select_related, prefetch_related の挙動を詳しく調べてみた
http://akiyoko.hatenablog.jp/entry/2016/08/03/080941

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。