我制作了一个django表单,其中包含两个字段的开始日期和结束日期,并制作了一个formset。当我在模板中使用formset作为
{{ myformset.management_form }}
{% for form in myformset %}
<p>For period {{ forloop.counter }}</p>
{{ form.as_table }}
<br/>
{% endfor %}
<input type = "submit" value = "See Results" id = "daterangeresult">
我在两个不同的行中得到了这两个字段的表单。对于多种形式,看起来并不好看,因为所有字段都在不同的行中。然后我改为使这两个字段显示在一行中,如下所示
{{ myformset.management_form }}
{% for form in myformset %}
<p>For period {{ forloop.counter }}</p>
<table>
<tr>
<td>Start Date {{form.start_date}}</td>
<td> </td>
<td>End Date {{form.end_date}}</td>
</tr>
</table>
<br/>
{% endfor %}
<input type = "submit" value = "See Results" id = "daterangeresult">
然后,此formset无法验证我已验证的表单字段 的 forms.py
from django import forms
from functools import partial
from datetime import date
DateInput = partial(forms.DateInput, {'class': 'dateinput'})
class DateRangeForm(forms.Form):
start_date = forms.DateField(widget=DateInput())
end_date = forms.DateField(widget=DateInput())
def clean(self):
if (self.cleaned_data.get('start_date') >= self.cleaned_data.get('end_date')):
raise forms.ValidationError( 'Start date must be less than end date')
elif(self.cleaned_data.get('start_date') > date.today() or self.cleaned_data.get('end_date') > date.today()):
raise forms.ValidationError('Date can not be greater than today')
else:
return self.cleaned_data
如何同时获取表格字段验证和模板中表单的自定义显示两件事?
答案 0 :(得分:1)
首先,我建议更新表单定义以包含标签和help_text。我不知道您使用的是哪个版本,但这里是一个很好的起点:https://docs.djangoproject.com/en/1.6/topics/forms/
然后,在模板中,只要您想将这些内容放入表单,就可以{{ form.start_date.label_tag }}
,{{ form.start_date }}
和{{ form.start_date.help_text }}
。
其次,对于验证问题,您可以覆盖clean_ fieldname ,而不是覆盖clean。在您的情况下clean_start_date
和clean_end_date
。一旦你有那些设置可以做
def clean_end_date(self):
start = self.cleaned_data['start_date']
end = self.cleaned_data['end_date']
if start > end:
...do stuff...