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
的等效项。
但是,有一些方法可以覆盖用于模型字段的小部件。最简单的方法是在模型的面板定义中使用 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 的管理 UI 是完全自定义的,不包含任何此类样式或脚本。
使用Django ModelAdmin时,我可以使用:
filter_horizontal = ('some_many_to_many_field',)
因此,它没有显示默认的多个 select 小部件,而是显示了一个漂亮的界面,其中包含两个块,用于 select 一些值。
对于我在 wagtail 的 ModelAdmin 中的多对多字段,是否有类似的选项可以使用与 django ModelAdmin 中相同的小部件?
谢谢!
回答您的问题:不,在 Wagtail 的 contrib.modeladmin
应用程序中没有 filter_horizontal
的等效项。
但是,有一些方法可以覆盖用于模型字段的小部件。最简单的方法是在模型的面板定义中使用 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 的管理 UI 是完全自定义的,不包含任何此类样式或脚本。