Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更するではformfield_overridesオプションを使用したwidgetの変更は、
field typeごとに行ってしまうため思い通りのAdmin siteにならない可能性があります。
今回は、その点も補えるfieldごとにwidgetの変更できるようにします。
仕様
- models.py, admin.pyは前回と同じものを使います。
- 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を見てみましょう。
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)
簡単な変更で多彩なAdmin siteを表現できるのではないでしょうか。

