ManyToManyFieldをAdmin siteで使うときに付けると便利なオプション

ManyToManyFieldを使ったmodelの作成

models.py

class Lang(models.Model):
    name = models.CharField(max_length = 20)

    def __unicode__(self):
        return self.name

class Project(models.Model):
    name = models.CharField(max_length = 100)
    lang = models.ManyToManyField(Lang, null = True)

    def __unicode__(self):
        return self.name

Admin siteに登録

admin.py

from django.contrib import admin
from models import Lang, Project

class ProjectAdmin(admin.ModelAdmin):
    pass

admin.site.register(Project, ProjectAdmin)
admin.site.register(Lang)

画面を確認

Langの項目が少ない場合は、Ctrlを使って選択すればこと足りましたが、多くなるとそうはいきません。

AdminManyToMany01

admin.pyを以下のようにすると、かなり便利になります。 admin.py

from django.contrib import admin
from models import Lang, Project

class ProjectAdmin(admin.ModelAdmin):
    filter_horizontal = ['lang']
    #filter_vertical = ['lang']

admin.site.register(Project, ProjectAdmin)
admin.site.register(Lang)

絞込みの機能が付き、探すのが楽になります。

AdminManyToMany03

ManyToManyFildを使用したModelをAdmin siteで利用するなら、 filter_horizontal, filter_verticalオプションを使用することをお薦めします。

twitter 2009-04-02 04:37:12.997119

参照サイト

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編