Admin siteのwidgetを個別に変更する

formfield_overridesを使ってAdmin siteのwidgetを変更するではformfield_overridesオプションを使用したwidgetの変更は、
field typeごとに行ってしまうため思い通りのAdmin siteにならない可能性があります。
今回は、その点も補えるfieldごとにwidgetの変更できるようにします。

仕様

  1. models.py, admin.pyは前回と同じものを使います。
  2. author fieldのみをTextarea widgetに変更します。

widget変更

個別のwidgetを変更するには、変更するfieldのwidgetを記述したModelFormクラスを作成して、VideoAdminクラスでformに作成したModelFormクラスを指定すれば実現できます。

admin.py

from django.contrib import admin
from django import forms
from django.forms.widgets import Textarea
from appname.models import Video, Category

class VideoForm(forms.Form):
    author = forms.CharField(widget = Textarea)

    class Meta:
        model = Video

class VideoAdmin(admin.ModelAdmin):
    form = VideoForm

class CategoryAdmin(admin.ModelAdmin):
    pass

admin.site.register(Video, VideoAdmin)
admin.site.register(Category, CategoryAdmin)

Admin siteを見てみましょう。

change_widget01_01

formfield_overridesとの併用は?

前回と同じようにcategory fieldをCheckboxSelectMultiple widgetに指定して実行してみます。

admin.py

from django.contrib import admin
from django import forms
from django.forms.widgets import Textarea
from appname.models import Video, Category

class VideoForm(forms.Form):
    author = forms.CharField(widget = Textarea)

    class Meta:
        model = Video

class VideoAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.ManyToManyField: {'widget': CheckboxSelectMultiple}}
    form = VideoForm

class CategoryAdmin(admin.ModelAdmin):
    pass

admin.site.register(Video, VideoAdmin)
admin.site.register(Category, CategoryAdmin)

change_widget01_02

簡単な変更で多彩なAdmin siteを表現できるのではないでしょうか。

twitter 2010-01-09 23:28:03.357522

関連ページ

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編