【问题标题】:Django RadioSelect in MultiWidget not hiddenMultiWidget中的Django RadioSelect未隐藏
【发布时间】:2014-07-02 22:43:05
【问题描述】:

我正在创建一个由 ChoiceField 和 CharField 组成的 MultiValueField。我现在意识到 MultiValueFields 不适用于 .as_hidden 模板标签,因此我查看了 django.forms.widgets.SplitDateTimeWidget 和 django.forms.widgets.SplitHiddenDateTimeWidget 实现以获得指导。

class YesNoDateWidget(forms.MultiWidget):
def __init__(self, attrs=None):
    _widgets = (
        forms.widgets.RadioSelect(attrs=attrs, choices=YESNO_CHOICES),
        forms.widgets.TextInput(attrs=attrs),
    )
    super(YesNoDateWidget, self).__init__(_widgets, attrs)

def decompress(self, value):
    print "Decompress: %s" % value
    if value:
        return [value, value]
    return [None, None]

class YesNoDateHiddenWidget(YesNoDateWidget):
    def __init__(self, attrs=None):
        super(YesNoDateHiddenWidget, self).__init__(attrs)
        for widget in self.widgets:
            widget.input_type = 'hidden'

class YesNoDateField(forms.fields.MultiValueField):
    widget = YesNoDateWidget
    hidden_widget = YesNoDateHiddenWidget

    def __init__(self, *args, **kwargs):
        fields = [
            forms.fields.ChoiceField(choices=YESNO_CHOICES),
            forms.fields.CharField(),
        ]
        super(YesNoDateField, self).__init__(fields, *args, **kwargs)

这几乎可以工作,并且在模板中 CharField 被隐藏(使用 {% for field in form %}{{ field.as_hidden }}{% endfor %}),但 ChoiceField 仍然呈现。如果我使用标准 ChoiceField(widget=RadioSelect) 并使用 {{ field.as_hidden }},它会呈现为普通字段。

谁能看出我做错了什么?

谢谢, /马丁

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    我最终没有继承隐藏字段的 YesNoDateWidget 类,而是基本上复制了它,只是将小部件 RadioSelectTextInput 切换到 HiddenInput。感觉很不干燥,但它会使车轮旋转。

    class YesNoDateHiddenWidget(forms.MultiWidget):
    def __init__(self, attrs=None):
        widgets = (
            forms.widgets.HiddenInput(attrs=attrs),
            forms.widgets.HiddenInput(attrs=attrs),
        )
        super(YesNoDateHiddenWidget, self).__init__(widgets, attrs)
    
    def decompress(self, value):
        print "Decompress: %s" % value
        if value:
            return [value, value]
        return [None, None]
    

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 2011-03-31
      • 2013-12-24
      • 2023-04-05
      • 2020-02-02
      • 1970-01-01
      • 2014-09-12
      • 2014-07-12
      相关资源
      最近更新 更多