django:adminページでインスタンスを検索する
adminでインスタンスの検索が必要になるケース
例えば運用しているアプリケーションのインスタンスに誤りがあるとする。このインスタンスを修正するためにadminから修正することになっていたとする。
この場合アドミンからインスタンスを選択し、修正を行う。しかしインスタンスが20,000件ほどあったらどうだろうか?検索できないとページを繰りながら該当インスタンスを探すことになる。200ページくらいページを繰りたいか?答えは否。
インスタンスを検索するフォームをアドミンに実装する
検索フォームの実装はModelAdminを継承したクラスの属性にsearch_fieldsを定めてやるだけで終了する。
from django.contrib import admin from products.models import Product class ProductModelAdmin(admin.ModelAdmin): search_fields = ["productId"] admin.site.register(Product, ProductModelAdmin)
このように書けば、新たにフォームがアドミンページに出現する。そしてproductidを打ち込むと、該当するインスタンスのみが抽出されるようになる。
この検索フォームの実装は前提条件がある。それは検索対象がCharFieldまたはTextFieldでことだ。
上記のフィールドではないフィールドを使って検索したい場合もある。その際は、クラス属性のlist_filterを使うと検索が可能になる。BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey、ManyToManyFieldであれば利用することができる。参考:https://docs.djangoproject.com/ja/2.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter