【发布时间】: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