4月からフリーランスになった中村です。
今までは2年程SESとして主にテスターを中心に経験し、現在は開発を行っています。
前回は参照時の取得方法であるselect_relatedについて記載しましたが、今回は逆参照の際の取得方法について記載しようと思います。
前回同様に以下のテーブルがあったとします。
book_table
・id
・book_name
・auther_id(FK=auher_table.id)
auher_table
・id
・auther_name
この場合に、auher_tableからbook_tableを取得するにはどうすればいいか。
auher_tableのidはbook_tableのauther_idに参照「されて」います。この際に、auher_tableから見たbook_tableを逆参照と呼びます。
逆参照の際はprefetch_relatedを使用します。以下はauher_tableからbook_tableを取得する際のコードです。
AuherTable.objects.prefetch_related(Prefetch("book_table_set", queryset=BookTable.objects.get(id=1)))
prefetch_relatedの場合は(table_name_set,table_objexts)で取得可能になります。
フィールド名のみ指定するselect_relatedとは異なる記述になります。