【问题标题】:Django Select Multiple Widget HorizontalDjango 水平选择多个小部件
【发布时间】:2023-03-07 15:26:02
【问题描述】:

我有选项组,如下所示:

Choices = (('Group1',(('Option1','Option1'),('Option2','Option2'))))

有没有使用SelectMultiple Widget 水平显示选项而不是垂直显示选项?我的问题是我有太多的组,所以如果我能有类似下面的东西会更好。

Group 1 - Option1, Option2, ...
Group 2 - Option1, Option2, ...

更新 - 找到了这个,但它只对 CheckboxSelectMultiple “有效”。为了使用 SelectMultiple,我应该如何更改它?

from django.utils.safestring import mark_safe

class HorizWidget(forms.SelectMultiple):

    def render(self, *args, **kwargs):
        output = super(HorizWidget, self).render(*args,**kwargs) 
        return mark_safe(output.replace(u'<ul>', u'').replace(u'</ul>', u'').replace(u'<li>', u'<p>').replace(u'</li>', u'</p>'))

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您使用的是 Django 管理员吗?如果是这样,filter_horizontalfilter_vertical 选项可以使多个选择更加有用(我必须承认,我之前没有尝试过分组选择)。

    如果这没有帮助,那么您可以继承 SelectMultiple 小部件并根据需要覆盖 render 方法。我个人更喜欢尽可能使用 javascript 小部件插件(例如jquery-ui-multiselect)。他们通常可以在您的模板标题中使用几行 javascript,我发现这比编写自定义小部件 html 痛苦得多。

    【讨论】:

    • 是的,我正在使用 Django Admin。我想我会尝试覆盖 SelectMultiple 小部件。我对 Django 还是很陌生...
    • 找到了这个,但它只对 CheckboxSelectMultiple “有效”。我应该如何更改它才能使用 SelectMultiple? class HorizWidget(forms.SelectMultiple): def render(self, *args, **kwargs): output = super(HorizWidget, self).render(*args,**kwargs) return mark_safe(output.replace(u'&lt;ul&gt;', u'').replace(u'&lt;/ul&gt;', u'').replace(u'&lt;li&gt;', u'&lt;p&gt;').replace(u'&lt;/li&gt;', u'&lt;/p&gt;'))
    • 请不要在 cmets 中发布大的代码块——你会丢失所有的缩进,所以很难阅读。您可以编辑原始问题以在其中包含代码。抱歉,我无法帮助您编写自定义小部件,希望有人可以帮助您,或者您可以解决。祝你好运!
    【解决方案2】:

    聚会迟到但可能对某人仍有帮助:

    Form(forms.Form):
        selection = forms.ModelMultipleChoiceField(queryset=models.MyModel.objects.all(),
                                                   widget=widgets.FilteredSelectMultiple('', False))
    

    【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2010-12-14
    • 1970-01-01
    • 2012-06-10
    • 2022-01-26
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多