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にアクセスしてみると以下のようになります。
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)
posted by (C)常山
見てみるとわかるのですが、いつ変更があったのかわかりませんが絞込みの機能が付いています。
使ってみました。
posted by (C)常山
ManyToManyFildを使用したModelをAdmin Interfaceで利用するなら、
filter_horizontal, filter_verticalオプションを使用することをお薦めします。
今回のネタ元は、Personnalisation de la page d'admin Django pour les ManyToManyFieldからです。