Django Logo

[Django]管理サイトで日付の範囲の絞り込みを追加する

Django の管理サイトの検索条件に日付の範囲での検索を追加する方法を説明します。

前提条件

  • Python : 3.6.2
  • Django : 3.0.5

こちらのソースをベースに実装していきたいと思います。

django-admin-rangefilter をインストール

下記コマンドを実行して「 django-admin-rangefilter をインストールします。

$ pip install django-admin-rangefilter

settings.py の編集

settings.pyINSTALLED_APPSdjango-admin-rangefilter を追加します。

INSTALLED_APPS = [
    ...
    'rangefilter'
    ...
]

UserAdmin の編集

accounts/admin.pyUserAdmin を下記のように編集します。

@admin.register(User)
class UserAdmin(ExportMixin, admin.ModelAdmin):
    ...
    list_filter = [IsActiveListFilter, NameFilter, EmailFilter, ['date_joined', DateRangeFilter]]
    ...

list_filter のところで「フィールド名 : DateRangeFilter 」を追加することで日付での範囲検索ができるようになります。
DateTimeRangeFilter を指定してあげると日時での範囲指定ができるようになります。

動作確認

管理サイトのユーザ画面を開くと、

Django RangeFilter 1

フィルターのところに日付の範囲指定の検索条件が追加されました!

その他カスタマイズ

デフォルト値の設定

検索条件にデフォルト値を設定したい場合、 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 パッケージを有効に活用してもらえればと思います。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です