wigtail admin中的多个选择

DSL*_*a90 5 python django python-3.x wagtail

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

filter_horizontal = ('some_many_to_many_field',) 
Run Code Online (Sandbox Code Playgroud)

因此,它不是显示默认的多选小部件,而是显示一个带有两个块的漂亮界面,用于选择一些值.

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

谢谢!

aba*_*bic 8

回答你的问题:不,filter_horizontal在Wagtail的contrib.modeladmin应用程序中没有相应的东西.

但是,有一些方法可以覆盖用于模型中字段的窗口小部件.最简单的方法是在模型的面板定义中使用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)
    ]
Run Code Online (Sandbox Code Playgroud)

或者,如果您注册的模型是其子类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)
    ]
Run Code Online (Sandbox Code Playgroud)

filter_horizontal不幸的是,没有相当于Django的小部件可以很容易地以这种方式使用.该特定小部件依赖于作为Django管理UI的一部分加载的各种样式和脚本.Wagtail的管理员界面是完全自定义的,不包含任何此类样式或脚本.