[Django]関連モデルのフィールドで条件指定(Filter)する方法

Django関連モデルのフィールド

Djangoのモデルで条件指定をする時に関連テーブルのモデルフィールドを使う方法をご紹介します。

例:Django のモデル定義 BookとAuthor

例えばBookとAuthorというモデルがあったとします。

Python

class Author(models.Model): 
    name = models.CharField(max_length=50)

class Book(models.Model):
    name = models.BooleanField()
    author =  models.ForeignKey(Collection)

Authorには作者名を保存するnameフィールドがあります。
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で開発するときの参考になれば幸いです(^^)

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください