Django Filter
Filter(フィルター)
このfilter()メソッドは検索をフィルタリングするために使用され、検索した文字に一致する行のみを返すことができます。
前の章で学んだように、次のようにフィールド名でフィルタリングできます。
SQLでは、上記のステートメントは次のように記述されます。
AND
このfilter()メソッドは引数を**kwargs(キーワード引数)として受け取るため、複数のフィールドをカンマで区切ってフィルタリングできます。
例
lastnameが"Refsnes"でIDが2のレコードを返します。
SQLでは、上記のステートメントは次のように記述されます。
OR
firstnameがEmilまたはfirstnameがTobiasのレコードを返す(つまり両方マッチする必要はなく、どちらかのクエリにマッチするレコードを返す)ことは、上記のANDの例ほど簡単ではありません。
複数の filter()メソッドを、パイプ 文字| で区切って使用することができます。結果は1つのモデルに結合されます。
例
firstnameが「Emil」または「Tobias」のいずれかであるレコードを返します。
もう1つの一般的な方法は、Q式をインポートして使用することです。
例
firstnameが「Emil」または「Tobias」のいずれかであるレコードを返します。
SQLでは、上記のステートメントは次のように記述されます。
Field Lookups(フィールドルックアップ)
Djangoには、SQLステートメントとWHERE句を指定する独自の方法があります。
Djangoで特定のwhere句を作成するには、「Field Lookups」を使用します。
フィールドルックアップは、特定のSQLキーワードを表すキーワードです。
例:
__startswithキーワードを使用します。
次のSQLステートメントと同じです。
上記のステートメントは、firstnameが「L」で始まるレコードを返します。
フィールドルックアップの構文
すべてのフィールドルックアップキーワードは、フィールド名、その後に続く2つのアンダースコア文字(!)、およびキーワードで指定する必要があります。
今回のMemberモデルの場合、ステートメントは次のように記述されます。
例
firstname文字「L」で始まるレコードを返します。
フィールドルックアップリファレンス
全フィールドの検索キーワードのリスト:
| Keyword | Description |
|---|---|
| contains | フレーズが含まれています |
| Icontains | containsと同じですが、大文字と小文字は区別されません |
| date | 日付と一致します/td> |
| day | 日付(1日~31日)に一致します(日付の場合) |
| endswith | で終わる |
| Iendswith | endwidthと同じですが、大文字と小文字は区別されません |
| exact | 完全一致 |
| Iexact | 完全一致と同じですが、大文字と小文字は区別されません |
| In | 値の1つに一致します |
| Isnull | NULL値に一致 |
| gt | より大きい |
| gte | 以上 |
| hour | 1時間に一致(日時の場合) |
| lt | 未満 |
| LTE | 以下 |
| minute | 1分に一致(datetimesの場合) |
| month | 月に一致する(日付の場合) |
| quarter | 年の四半期(1~4)に一致します(日付の場合) |
| range | 間の一致 |
| regex | 正規表現に一致 |
| Iregex | 正規表現と同じですが、大文字と小文字を区別しません |
| second | 秒に一致します(datetimesの場合) |
| startswith | で始まる |
| Istartswith | startswithと同じですが、大文字と小文字は区別されません |
| time | 時刻に一致します(datetimesの場合) |
| week | 週番号(1~53)に一致(日付の場合) |
| week_day | 曜日に一致(1-7) 1は日曜日 |
| iso_week_day | ISO8601の曜日(1~7)に一致します 1は月曜日です |
| year | 年に一致(日付の場合) |
| iso_year | ISO8601年(日付)に一致します |