DjangoBrothers BLOG ✍️

2019/09/09

このエントリーをはてなブックマークに追加
Django クエリセット

【Django】QuerySetをdict型(辞書)でfilterする

クエリセットで複数の条件を指定するとき

クエリセットのフィルタで複数の条件を指定したいときは、以下のようにfilterを繋げることで複数の条件を指定できます。

filterを繋げる

Person.objects.filter(age=20).filter(gender='M')

辞書型を使ってfilterする

一方、辞書型を使ってfilterをすることもできます。

dict型の検索条件を使ってfilterする

condition = {
    'age': 20,
    'gender': 'M',
}

Person.objects.filter(**condition)

検索条件となる辞書をアンパックして、filterの引数として渡します。 辞書のキーは文字列型にする必要があるので'age'のようにクォートで囲んであげる必要があります。

{'name__startswith' : 'J'}のような条件も普通に使用できます。

検索条件の数が変動する場合等は、dictを活用した方がすっきりした記述で実装できる場面があるかと思います。