Djangoのモデルで条件指定をする時に関連テーブルのモデルフィールドを使う方法をご紹介します。
例:Django のモデル定義 BookとAuthor
例えばBookとAuthorというモデルがあったとします。
Python
Authorには作者名を保存するnameフィールドがあります。
class Author(models.Model):
name = models.CharField(max_length=50)
class Book(models.Model):
name = models.BooleanField()
author = models.ForeignKey(Collection)
Bookには本の名前と作者を保存するフィールドnameとauthorがあります。
authorはAuthorモデルを外部キーとしています。
関連モデルのフィールド名で条件を指定する。
それでは早速はBookをListViewから呼び出した時に特定の作者だけを取り出してみましょう。
Python
class BookListView(generic.ListView):
model = Book
template_name = 'view_list.html'
def get_queryset(self):
return Book.objects.filter(author__name='夏目漱石')
ここではgeneric.ListViewを利用しています。リストを取得内容を上書きするget_querysetを呼び出してBookに対してfilterで条件を指定します。
この時、Bookにあるフィールドを呼び出すだけならname,author
を直接指定すれば良いのですが、Authorのフィールドを指定する時はauthorの後にアンダーバーを2回入力した後にフィールド名を入力します。こうすることで関連モデルのフィールを対象にした検索ができます。
上の検索結果では夏目漱石が作者名のBookだけが表示されます。
Djangoで開発するときの参考になれば幸いです(^^)
コメントを残す