TECH I.S.

Django Filter


Filter(フィルター)

このfilter()メソッドは検索をフィルタリングするために使用され、検索した文字に一致する行のみを返すことができます。

前の章で学んだように、次のようにフィールド名でフィルタリングできます。

名が「Emil」であるレコードのみを返します。

mydata = Member.objects.filter(firstname='Emil').values()

実行例(開発準備中) »

SQLでは、上記のステートメントは次のように記述されます。

SELECT * FROM members WHERE firstname = 'Emil';

AND

このfilter()メソッドは引数を**kwargs(キーワード引数)として受け取るため、複数のフィールドをカンマで区切ってフィルタリングできます。

lastnameが"Refsnes"でIDが2のレコードを返します。

mydata = Member.objects.filter(lastname='Refsnes', id=2).values()

実行例(開発準備中) »

SQLでは、上記のステートメントは次のように記述されます。

SELECT * FROM members WHERE lastname = 'Refsnes' AND id = 2;

OR

firstnameがEmilまたはfirstnameがTobiasのレコードを返す(つまり両方マッチする必要はなく、どちらかのクエリにマッチするレコードを返す)ことは、上記のANDの例ほど簡単ではありません。

複数の filter()メソッドを、パイプ 文字| で区切って使用することができます。結果は1つのモデルに結合されます。

firstnameが「Emil」または「Tobias」のいずれかであるレコードを返します。

mydata = Member.objects.filter(firstname='Emil').values() | Member.objects.filter(firstname='Tobias').values()

実行例(開発準備中) »

もう1つの一般的な方法は、Q式をインポートして使用することです。

firstnameが「Emil」または「Tobias」のいずれかであるレコードを返します。

from django.http import HttpResponse from django.template import loader from .models import Member from django.db.models import Q def testing(request): mydata = Member.objects.filter(Q(firstname='Emil') | Q(firstname='Tobias')).values() template = loader.get_template('template.html') context = { 'mymembers': mydata, } return HttpResponse(template.render(context, request))

実行例(開発準備中) »

SQLでは、上記のステートメントは次のように記述されます。

SELECT * FROM members WHERE firstname = 'Emil' OR firstname = 'Tobias';

Field Lookups(フィールドルックアップ)

Djangoには、SQLステートメントとWHERE句を指定する独自の方法があります。

Djangoで特定のwhere句を作成するには、「Field Lookups」を使用します。

フィールドルックアップは、特定のSQLキーワードを表すキーワードです。

例:

__startswithキーワードを使用します。

.filter(firstname__startswith='L');

次のSQLステートメントと同じです。

WHERE firstname LIKE 'L%';

上記のステートメントは、firstnameが「L」で始まるレコードを返します。

フィールドルックアップの構文

すべてのフィールドルックアップキーワードは、フィールド名、その後に続く2つのアンダースコア文字(!)、およびキーワードで指定する必要があります。

今回のMemberモデルの場合、ステートメントは次のように記述されます。

firstname文字「L」で始まるレコードを返します。
mydata = Member.objects.filter(firstname__startswith='L').values()

実行例(開発準備中) »

フィールドルックアップリファレンス

全フィールドの検索キーワードのリスト:

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年(日付)に一致します


プログラミング学習を加速させる

プログラミングをプロの講師に教えてもらいませんか。

テックアイエスのプログラミングスクールは初心者も大歓迎です。年齢制限もありません。転職・副業に強く、挫折させない手厚いサポートで稼ぐ力を身につけましょう!

スクールの詳細