Django
の管理サイトの検索条件に日付の範囲での検索を追加する方法を説明します。
前提条件
- Python : 3.6.2
- Django : 3.0.5
こちらのソースをベースに実装していきたいと思います。
GitHub - koichi-ezato/sample
Contribute to koichi-ezato/sample development by creating an...
django-admin-rangefilter をインストール
GitHub - silentsokolov/django-admin-rangefilter: A Django app that lets you filter data by date range and numeric range in the admin UI
A Django app that lets you filter data by date range and num...
下記コマンドを実行して「 django-admin-rangefilter
をインストールします。
$ pip install django-admin-rangefilter
settings.py の編集
settings.py
の INSTALLED_APPS
に django-admin-rangefilter
を追加します。
INSTALLED_APPS = [
...
'rangefilter'
...
]
UserAdmin の編集
accounts/admin.py
の UserAdmin
を下記のように編集します。
@admin.register(User)
class UserAdmin(ExportMixin, admin.ModelAdmin):
...
list_filter = [IsActiveListFilter, NameFilter, EmailFilter, ['date_joined', DateRangeFilter]]
...
list_filter
のところで「フィールド名 : DateRangeFilter
」を追加することで日付での範囲検索ができるようになります。
DateTimeRangeFilter
を指定してあげると日時での範囲指定ができるようになります。
動作確認
管理サイトのユーザ画面を開くと、
フィルターのところに日付の範囲指定の検索条件が追加されました!
その他カスタマイズ
デフォルト値の設定
検索条件にデフォルト値を設定したい場合、 UserAdmin
クラス内に下記のメソッドを追加します。
def get_rangefilter_created_at_default(self, request):
return (datetime.date.today, datetime.date.today)
タイトル設定
検索条件の項目名を変更したい場合、 UserAdmin
クラス内に下記のメソッドを追加します。
def get_rangefilter_created_at_title(self, request, field_path):
return '検索項目名'
最後に
日付の範囲指定はデータを検索するときによく使うことがあると思うので、今回紹介した django-admin-rangefilter
パッケージを有効に活用してもらえればと思います。
コメント