使用Django ModelAdmin时,我可以使用:
filter_horizontal = ('some_many_to_many_field',)
因此,它不是显示默认的多选小部件,而是显示一个带有两个块的漂亮界面,用于选择一些值。
对于wagtail的ModelAdmin中的多对多字段,是否有与django ModelAdmin中相同的小部件使用类似的选项?
谢谢!
答案 0 :(得分:6)
回答您的问题:不,Wagtail的filter_horizontal
应用中没有等效的contrib.modeladmin
。
但是,有一些方法可以覆盖用于模型中字段的窗口小部件。最简单的方法是在模型的面板定义中使用FieldPanel的widget
参数。例如:
from django import forms
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel
class TestModel(models.Model):
manytomany = models.ManyToManyField('someapp.SomeModel', blank=True)
panels = [
FieldPanel('manytomany', widget=forms.CheckboxSelectMultiple)
]
或者,如果您注册的模型是wagtail.core.models.Page
的子类,则以下示例更合适:
from django import forms
from django.db import models
from modelcluster.fields import ParentalManyToManyField
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel
class TestPageModel(Page):
manytomany = ParentalManyToManyField('someapp.SomeModel', blank=True)
content_panels = Page.content_panels + [
FieldPanel('manytomany', widget=forms.CheckboxSelectMultiple)
]
不幸的是,没有相当于Django的filter_horizontal
小部件可以很容易地以这种方式使用。该特定小部件依赖于作为Django管理UI的一部分加载的各种样式和脚本。 Wagtail的管理员界面是完全自定义的,不包含任何此类样式或脚本。