related_nameと逆引き
両方向から関連をたどります
「related_nameと逆引き」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。
関連は両方向にたどれる
本から著者への ForeignKey を設定しても、逆方向にたどることができます。reverse lookupを使うと、1側から多側にアクセスできます。
デフォルトの _set manager
Django はデフォルトで、逆方向のアクセサーにmodelname_setという名前を付けます。著者から見ると、本は book_set として現れます。
author = Author.objects.first()
author.book_set.all()_set は manager
book_set は完全なmanagerなので、通常のクエリと同じように filter、order_by、count をつなげて使えます。
author.book_set.filter(published=True).count()related_name で名前を付ける
_set という名前は扱いにくいものです。ForeignKey にrelated_nameを設定すると、逆方向のアクセサーにわかりやすい名前を自分で付けられます。
author = models.ForeignKey(Author, related_name="books", on_delete=models.CASCADE)よりわかりやすい逆方向アクセス
これで逆方向のアクセスが自然になります。book_set の代わりにbooksと書くだけでよく、はるかに読みやすくなります。
author.books.all()クエリで逆方向にたどる
related_name は、関連をまたいだfilterにも使われます。もう一方のモデルから、double underscore と選択した名前を使います。
Author.objects.filter(books__published=True)デフォルトのクエリ名
related_name を省略すると、逆方向のクエリ名は小文字のモデル名になります。たとえば author.objects.filter(book__title=...) のように記述します。
名前の衝突を避ける
同じモデルから同じ対象への ForeignKey が2つあると、逆方向の名前が衝突します。それぞれに異なるrelated_nameを設定すれば解決できます。
writer = models.ForeignKey(User, related_name="written", on_delete=models.CASCADE)
editor = models.ForeignKey(User, related_name="edited", on_delete=models.CASCADE)逆方向のアクセスを無効にする
related_name に+で終わる値を設定すると、逆方向のアクセサーを完全に無効にできます。必要のない場合に使用します。
owner = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)related_query_name
related_query_nameを使うと、名前を分けられます。関連する行を読み取る属性とは別に、filter で使う名前を設定できます。
tags = models.ManyToManyField(Tag, related_name="posts", related_query_name="post")すべての関連で使える
related_name はForeignKey、ManyToManyField、OneToOneField のすべてに適用できます。そのため、どの逆方向の経路にもわかりやすい名前を付けられます。
理解度チェック
Book の author ForeignKey に related_name="books" を設定しました。著者の本を一覧表示するにはどうしますか?
まとめ
できました!reverse lookup を使うと関連を逆方向にたどれます。また、related_nameによって、扱いにくい _set アクセサーを明確で読みやすい名前に変更できます。🔄
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「related_nameと逆引き」レッスンは無料ですか?
はい。「related_nameと逆引き」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。
「related_nameと逆引き」で何を学びますか?
両方向から関連をたどります ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Django Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「related_nameと逆引き」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDjango Academyレッスンでコードを書いて実行できますか?
はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。