Django Logo

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

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

前提条件

  • Python : 3.6.2
  • Django : 3.0.5

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

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']

動作確認

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

Django Autocomplete 1

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

最後に

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

コメントする

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