プログラミング

[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 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 using autocomplete widget. - GitHub - farhan0581/django-admin-autocomplete-filter: A simple Django a...

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

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

コメント

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