diadia

興味があることをやってみる。自分のメモを残しておきます。

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=(****)