我的表格是这样的:
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)”中添加另一个字段,因为在我遇到的实际问题中已经排除了这个字段。我根据自己的需要提出了这个问题。 提前谢谢。
答案 0 :(得分:0)
我认为正确的解决方案是创建一个窗口小部件,它将呈现这两个字段,并且能够检索值并对该值执行一些清理操作。
据我所知,没有关于自定义小部件编写主题的详细文档。您可以通过django代码中的示例进行编码:
django.forms.widgets
答案 1 :(得分:0)
Django中的表单应该表示要向最终用户显示的字段。如果表单的可视化表示应该包含比表单中声明的字段更多或更少,那么它可能是错误的。
如果您需要“开始日期”和“结束日期”字段,那么应该在您正在创建的表单类中表示。如果你需要一张上面只有一个日期的表格,那就有两种不同的表格!
没有简单的方法可以劫持表单,修改表单,显示表单,然后在到达绑定数据的服务器后对其进行验证。你可以做一个表单的动态子类,但我不知道在这种情况下这将是一件好事。您知道“编译时”所需的字段。把它们放在一个表格中!即使它是一个品牌打击 - 新的。
最后一件事,是否有理由使用forms.ModelForm
?您似乎正在创建一个完全自定义的表单。我认为forms.Form
就是你所追求的目标。