質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2232閲覧

Django 多対多(N対N)のテーブルのレコード取得

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/15 10:36

編集2018/09/17 00:02

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ここの悪い例として紹介されている書き方のため,意図しない結果となっている可能性が高いです.

投稿2021/10/07 10:19

dark-eater-kei

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問