[Django]管理サイトにオートコンプリートの絞り込みを追加する

Django Logo プログラミング

Django の管理サイトの検索条件のテキストボックスにオートコンプリート機能を追加する方法を説明します。

前提条件

  • Python : 3.6.2
  • Django : 3.0.5

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

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

Django Admin Autocomplete Filter をインストール

GitHub - farhan0581/django-admin-autocomplete-filter: A simple Django app to render list filters in django admin using autocomplete widget.
A simple Django app to render list filters in django admin u...

下記コマンドを実行して「 Django Admin Autocomplete Filter 」をインストールします。

$ pip install django-admin-autocomplete-filter

settings.py の編集

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

INSTALLED_APPS = [
    ...
    'admin_auto_filters'
    ...
]

使い方の注意点

オートコンプリートのフィルターがつけられるのは外部キーとして指定しているフィールドが対象になります。また、外部キーとして指定しているモデルの Admin クラスが実装済みで search_fields が設定されていないとオートコンプリートフィルターは動かないので注意が必要です。

UserAdmin の編集

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

class BelongFilter(AutocompleteFilter):
    title = '所属'
    field_name = 'belong'

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

@admin.register(Belong)
class BelongAdmin(admin.ModelAdmin):
    list_display = ['name', 'delete_flg']
    search_fields = ['name']

動作確認

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

フィルターのところにオートコンプリートの検索条件が追加されました!!

最後に

オートコンプリート機能があるフィルターを追加する場合、外部キーの設定や外部キーのモデルの Admin クラスの実装など前提条件が色々ありますので、パッケージの仕様や注意点をきちんと確認しながら実装していきたいですね。

コメント

モバイルバージョンを終了
タイトルとURLをコピーしました