我有一个包含一个或多个MultipleChoiceFields或ChoiceFields的动态表单。我想向用户显示一条指令,例如for ChoiceField:“选择以下之一”,对于MultipleChoiceField:“选择以下任何一个”
我该怎么做?我尝试了对每个字段进行子类化,但是我无法在模板中取回值。
由于
修改
我尝试过类似的事情:
class MultiWithInstruction(forms.MultipleChoiceField):
def __init__(self, instruction=None, **kwargs):
self.instruction=instruction
return super(MultiWithInstruction, self).__init__(**kwargs)
我无法在模板中检索“指令”的值。
答案 0 :(得分:0)
为什么不使用help_text
?
class MyForm(forms.Form):
my_field = forms.MultipleChoiceField(help_text='Pick one of these', ....)
然后在模板中你可以这样做:
<p>{{ field.label_tag }}: {{ field }}</p>
{% if field.help_text %}<p class="help_text">{{ field.help_text|safe }}</p>{% endif %}
答案 1 :(得分:0)
您可以在表单字段中设置标签值:
myfield = forms.MultipleChoiceField(label='Select any of the following')
答案 2 :(得分:0)
我遇到了同样的问题。我找不到一个简单的方法(没有从django.forms覆盖很多东西)所以我想出了这个快速而肮脏的解决方案。
定义一个新的模板过滤器,在给定分隔符的情况下将字符串拆分为列表;请参阅Ciantic的this simple snippet。将代码段保存为templatetags/whatever_name.py
。
在forms.py
中,使用您的帮助和指令字符串填充字段的help_text
属性,以“#”分隔(当然,您可以选择所需的任何分隔符);
my_field = forms.MultipleChoiceField(help_text = '%s#%s' % (help_string, instruction_string), ...)
help_text
是一个字符串(已标记为安全),因此您无法在其中添加列表(这就是需要自定义拆分过滤器的原因)。
这是一个模板示例,它显示表单中每个字段的帮助和指令字符串:
{% load whatever_name %}
{% for field in form %}
help: {% filter split:"#"|first %}{{ field.help_text }}{% endfilter %}
instruction: {% filter split:"#"|last %}{{ field.help_text }}{% endfilter %}
{% endfor %}
显然,您无法使用as_p
,as_table
和as_ul
来呈现表单。