プログラミング

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

プログラミング
この記事は約3分で読めます。
スポンサーリンク

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

スポンサーリンク

前提条件

  • Python:3.6.2
  • Django:3.0.5

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

GitHub - koichi-ezato/sample
Contribute to koichi-ezato/sample development by creating an account on GitHub.

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

GitHub - silentsokolov/django-admin-rangefilter: A Django app that adds a filter by date range to the admin UI
A Django app that adds a filter by date range to the admin UI - GitHub - silentsokolov/django-admin-rangefilter: A Django app that adds a filter by date range t...

下記コマンドを実行して「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を指定してあげると日時での範囲指定ができるようになります。

動作確認

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

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

その他カスタマイズ

デフォルト値の設定

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

スポンサーリンク
スポンサーリンク
KoEをフォローする
CodeLab

コメント

タイトルとURLをコピーしました