DjangoのAdmin便利だけど、ドキュメントの説明がくどい。
読めばわかるけど、その読む時間が微妙に無駄になったりする。忘れるし。
というわけで逆引き的に便利そうなやつだけまとめてadmin書くときにこれを見ればだいたいのことは簡単にサンプルコードとどういう見た目になるかをまとめることにする。(adminで色々やりすぎは注意)
閲覧画面に表示する(list_display)
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name')
adminフォームに表示しない(exclude)
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title')
class AuthorAdmin(admin.ModelAdmin):
exclude = ('birth_date',)
adminにフォーム表示する(fields)
class FlatPageAdmin(admin.ModelAdmin):
fields = ('url', 'title', 'content')
複数の項目を同じ行に表示させる場合はこう
class FlatPageAdmin(admin.ModelAdmin):
fields = (('url', 'title'), 'content')
一部の値だけアコーディオン形式にして非表示にしておく(fieldsets collapse)
公式の画像にある、Advanced options(show)って書かれているところみたいに、一部の項目だけ非表示にしておくことができる。is_staffみたいな要素に使ったりする。
from django.contrib import admin
class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('url', 'title', 'content', 'sites')
}),
('Advanced options', {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)
ManytoManyフィールドを追加しやすくする(filter_horizontal/filter_vertical)
一覧表示画面から編集のリンクがidにしかなくて変えたい(list_display_links)
class PersonAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'birthday')
list_display_links = ('first_name', 'last_name')
一々編集画面に飛ばないで編集しちゃいたい(list_editable)
フィルタを付けたい(list_filter)
- 普通に使う場合
class PersonAdmin(admin.ModelAdmin):
list_filter = ('is_staff', 'company')
- 参照先の属性でフィルタする場合
class PersonAdmin(admin.UserAdmin):
# __を付けて関係先を参照
list_filter = ('company__name',)
ページに表示させるアイテム数を制限(list_per_page)
デフォルトは100
公式
adminでもselect_relatedを使う
class ArticleAdmin(admin.ModelAdmin):
list_select_related = ('author', 'category')
並べ方を指定しておく(ordering)
python dict的な感じのフォームにしたい()
下の例だと、Slug : titleのフォーム
みたいな感じになる。
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
検索ボックスを作る(search_fields)
指定するフィールドの種類は、
CharField
やTextField
といったテキストフィールドである必要があります。
例
search_fields = ['foreign_key__related_fieldname']
search_fields = ['user__email']
モデルを時系列順に上のタブで管理する(date_hierarchy)
値がない項目を-ではない値にして表示する(empty_value_display)
List_displayは表示画面の方で、fields,excludeは追加編集画面に関するもので混同しやすいので一つの塊として書いておく
複数のモデルを一つの編集画面で追加編集したい
- StackedInline
- 下に積み上げていく方式
- TabularInline
- 表形式
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
StackedInline例
from django.contrib import admin
class BookInline(admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
inlines = [
BookInline,
]