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

2日連続のAdmin Interfaceネタ


まずは、ManyToManyFieldを使ったmodelを作成します。

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 Interfaceで使える最低限の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)

Projectにアクセスしてみると以下のようになります。
AdminManyToMany01
posted by (C)常山
Langの項目が少ない場合は、Ctrlを使って選択すればこと足りましたが、多くなるとそうはいきません。
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)

AdminManyToMany02
posted by (C)常山


見てみるとわかるのですが、いつ変更があったのかわかりませんが絞込みの機能が付いています。
使ってみました。
AdminManyToMany03
posted by (C)常山


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


今回のネタ元は、Personnalisation de la page d'admin Django pour les ManyToManyFieldからです。