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

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

前提条件

  • Python:3.6.2
  • Django:3.0.5

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

https://github.com/koichi-ezato/sample

Django Admin Autocomplete Filterをインストール

https://github.com/farhan0581/django-admin-autocomplete-filter

下記コマンドを実行して「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クラスの実装など前提条件が色々ありますので、パッケージの仕様や注意点をきちんと確認しながら実装していきたいですね。

コメントする

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