【问题标题】:Multiple select in wagtail admin鹡鸰管理员中的多项选择
【发布时间】:2017-08-16 14:27:10
【问题描述】:

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

filter_horizontal = ('some_many_to_many_field',) 

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

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

谢谢!

【问题讨论】:

    标签: python django python-3.x wagtail


    【解决方案1】:

    回答您的问题:不,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 是完全自定义的,不包含任何此类样式或脚本。

    【讨论】:

    • 感谢您的回答。也许我会尝试自己实现它。这对我的客户非常有用...
    • MultipleChoiceBlock 会帮助解决问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2021-05-16
    • 2020-08-23
    相关资源
    最近更新 更多