Django 1.2:自定义表单字段?

时间:2010-10-03 20:19:20

标签: django django-forms

我有一个包含一个或多个MultipleChoiceFields或ChoiceFields的动态表单。我想向用户显示一条指令,例如for ChoiceField:“选择以下之一”,对于MultipleChoiceField:“选择以下任何一个”

我该怎么做?我尝试了对每个字段进行子类化,但是我无法在模板中取回值。

由于

修改

我尝试过类似的事情:

class MultiWithInstruction(forms.MultipleChoiceField):
    def __init__(self, instruction=None, **kwargs):
        self.instruction=instruction
        return super(MultiWithInstruction, self).__init__(**kwargs)

我无法在模板中检索“指令”的值。

3 个答案:

答案 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_pas_tableas_ul来呈现表单。