admin.pyメモ まとめ
技法1 admin の表示を少し変える
やりたいこと
models.pyで規定したmodelの要素はadminページで一覧で確認することが出来ない。
adminページ上で任意の項目を一覧表示できるようにするにはどうしたら良いのか?
例えばmodelであるBlogにtitle ,description, private の要素がある。Happy dayなる記事のprivateか否かはHappy dayの詳細にアクセスしないと見えない状態だ。アクセスしないでも一覧できるようにしたいってことだ。
前提条件
models.py
class Blog(models.Model) title = models.CharField(max_length=120) description = models.TextField() private = models.BooleanField(default=True)
admin.py
from django.contrib import admin from hoge.models import Hoge admin.site.register(Hoge)
___________________________________________________________________________
解決案
admin.pyに表示させたい項目をのせたModelAdminを追加する。以下のコードを参考にしている。
https://docs.djangoproject.com/ja/2.1/intro/tutorial07/#customize-the-admin-change-list
admin.py
from django.contrib import admin from hoge.models import Hoge class BlogAdmin(admin.ModelAdmin): list_display = ('title', 'description', 'private') #modelのオブジェクトは"__str__"を加えれば表示できる admin.site.register(Hoge, BlogAdmin) #admin.ModelAdminもadmin.site.registerに加えることがポイント
こうすると表示が変わる。継承したModelAdminを設け、新たにlist_display=(カラム)を配置すれば解決できると思えば良い。
整理 adminサイトのカスタマイズ
adminサイトがどのような構造になっていて、どの構造(where)でカスタマイズできるかを整理する。
①models.pyで定めた各モデルを一覧できるページ
②一覧できる各モデルを選択してクリックしたときのページ
ここではデータオブジェクトのリストをが一覧できるようになっている。
カスタマイズ①:ここでadmin.pyに list_display=("hoge",) を加えると、カラムであるhogeもこの一覧ページに表示される。
カスタマイズ②:ここでadmin.pyに list_filter=(**********,)を加えると、ページ右隅にフィルター機能を備えることができる。
これによりデータオブジェクトの一覧から絞り込んだ結果を表示することが可能になる。
③②の構成要素であるデータオブジェクトを選択したときのページ
カスタマイズ:例えばデータオブジェクトにカラムが多いときは編集や新規作成が見づらくなってしまう。そこでhtmlのfieldsetタグと同じように、入力欄も任意に区切って見やすくすることができる。
fieldsets=(****)