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を使って選択すればこと足りましたが、多くなるとそうはいきません。
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)
絞込みの機能が付き、探すのが楽になります。
ManyToManyFildを使用したModelをAdmin siteで利用するなら、 filter_horizontal, filter_verticalオプションを使用することをお薦めします。

