在模板中自定义django表单时验证失败

在模板中自定义django表单时验证失败,django,validation,django-forms,django-templates,Django,Validation,Django Forms,Django Templates,我制作了一个django表单,其中包含两个字段“开始日期”和“结束日期”,并制作了一个表单集。当我使用模板中的formset作为 {{ myformset.management_form }} {% for form in myformset %} <p>For period {{ forloop.counter }}</p> {{ form.as_table }} <br/> {% endfor %} <input type = "submit"

我制作了一个django表单,其中包含两个字段“开始日期”和“结束日期”,并制作了一个表单集。当我使用模板中的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">

如何同时获得表单字段验证和模板中表单的自定义显示这两项功能?

首先,我建议更新表单定义,以包含标签和帮助文本。我不知道您使用的是哪个版本,但这里是一个很好的起点:

然后,在模板中,只要将它们放入表单中,就可以执行
{{form.start\u date.label\u tag}}
{form.start\u date}
{form.start\u date.help\u text}

其次,对于验证问题,您可能会重写clean\u fieldname,而不是重写clean。在您的情况下,
clean\u start\u date
clean\u end\u date
。一旦你有了这些可以做的

def clean_end_date(self):
    start = self.cleaned_data['start_date'] 
    end = self.cleaned_data['end_date'] 

    if start > end:
        ...do stuff...
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
def clean_end_date(self):
    start = self.cleaned_data['start_date'] 
    end = self.cleaned_data['end_date'] 

    if start > end:
        ...do stuff...