为Django模板中的每个表单字段生成唯一名称

时间:2011-01-09 18:11:10

标签: django django-templates django-forms

我的表格是这样的:

class PersonForm(forms.ModelForm):
    name=forms.CharField(label = 'Name')
    birth_date = forms.DateField(widget = SelectDateWidget(years=range(1985,2020) ),label = 'DOB')
    place = forms.CharField(label='Place')

假设我正在使用此模板,其中birth_date(日期字段)在模板中重复两次,如下所示:

{% for field in form %}
<tr>
        <th scope="row" class={% cycle "spec" "specalt" %}> </th>             
        <td {% cycle '' 'class="alt"' %}>

    {% if  field.field.datatype == 'Date' %}

        **Range : {{field}}   {{field}}**            

    {% else %}
        {{ field}}              
    {% endif %}

如上所示,我重复两次日期字段。但是我在POST请求中收到表单,我无法在两个日期字段之间进行区分。如何在模板中重命名一个日期字段,以便我可以在视图函数中轻松区分。

注意:请不要建议在“class PersonForm(forms.ModelForm)”中添加另一个字段,因为在我遇到的实际问题中已经排除了这个字段。我根据自己的需要提出了这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为正确的解决方案是创建一个窗口小部件,它将呈现这两个字段,并且能够检索值并对该值执行一些清理操作。

据我所知,没有关于自定义小部件编写主题的详细文档。您可以通过django代码中的示例进行编码:

django.forms.widgets

答案 1 :(得分:0)

Django中的表单应该表示要向最终用户显示的字段。如果表单的可视化表示应该包含比表单中声明的​​字段更多或更少,那么它可能是错误的。

如果您需要“开始日期”和“结束日期”字段,那么应该在您正在创建的表单类中表示。如果你需要一张上面只有一个日期的表格,那就有两种不同的表格!

没有简单的方法可以劫持表单,修改表单,显示表单,然后在到达绑定数据的服务器后对其进行验证。你可以做一个表单的动态子类,但我不知道在这种情况下这将是一件好事。您知道“编译时”所需的字段。把它们放在一个表格中!即使它是一个品牌打击 - 新的。

最后一件事,是否有理由使用forms.ModelForm?您似乎正在创建一个完全自定义的表单。我认为forms.Form就是你所追求的目标。

相关问题