wagtail 管理员中有多个 select

Multiple select in wagtail admin

使用Django ModelAdmin时,我可以使用:

filter_horizontal = ('some_many_to_many_field',) 

因此,它没有显示默认的多个 select 小部件,而是显示了一个漂亮的界面,其中包含两个块,用于 select 一些值。

对于我在 wagtail 的 ModelAdmin 中的多对多字段,是否有类似的选项可以使用与 django ModelAdmin 中相同的小部件?

谢谢!

回答您的问题:不,在 Wagtail 的 contrib.modeladmin 应用程序中没有 filter_horizontal 的等效项。

但是,有一些方法可以覆盖用于模型字段的小部件。最简单的方法是在模型的面板定义中使用 FieldPanelwidget 参数。例如:

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 的管理 UI 是完全自定义的,不包含任何此类样式或脚本。