Django 提交自定义日期格式的表单时出现ValidationError
当提交django表单时,我得到一个ValidationError 在我的表格中,这是我的输入:2017年1月1日 但是django告诉我格式必须是“AAAA-MM-GG”。Django 提交自定义日期格式的表单时出现ValidationError,django,django-forms,django-views,Django,Django Forms,Django Views,当提交django表单时,我得到一个ValidationError 在我的表格中,这是我的输入:2017年1月1日 但是django告诉我格式必须是“AAAA-MM-GG”。 在这个异常位置:/usr/local/lib/python3.5/dist-packages/django/db/models/fields/init.py到python,第1271行 这是我项目的代码: # models.py class Archivio(models.Model): sys_codice
在这个异常位置:/usr/local/lib/python3.5/dist-packages/django/db/models/fields/init.py到python,第1271行 这是我项目的代码:
# models.py
class Archivio(models.Model):
sys_codice = models.AutoField(primary_key=True)
some_other_field ...
class QuoteIscrizione(models.Model):
sys_chiave = models.AutoField(primary_key=True)
sys_cod = models.ForeignKey(Archivio, on_delete=models.CASCADE)
data_quota = models.DateField(blank=True, null=True)
# forms.py
class ArchivioSearchForm(forms.Form):
data_quota = forms.DateField(widget=forms.DateInput(format='%d/%m/%Y'), input_formats=('%d/%m/%Y',), required=False)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for field in self:
field.field.widget.attrs['class'] = 'form-control '
if type(field.field.widget) is DateInput:
field.field.widget.attrs['class'] += 'datepicker'
def clean(self):
data_quota = self.cleaned_data['data_quota']
return self.cleaned_data
# views.py
def ArchivioSearchView(request):
model = Archivio
form = ArchivioSearchForm()
if request.GET.get('data_quota'):
selection = Archivio.objects.filter(Q(quoteiscrizione__data_quota__gte=request.GET.get('data_quota'))
return render(request, 'search_template.html', {'selection':selection, 'form':form})
# search_template.html
<form action="" method="get" class="form-horizontal">
<div class="form-group form-group-md">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
{% for field in form %}
<div class="form-group row">
<label class="col-md-3 col-form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
<div class="col-md-6">
{{ field.as_widget() }}
</div>
</div>
{% endfor %}
<input type="submit" value="Confermo" />
</div>
</form>
{% for select in selection %}
<h4><li><a href="{{ url('archivio_detail', args=[select.pk]) }}">{{ select.nominativo }}</a></li></h4>
{% endfor %}
我已尝试在我的设置上使用。当然,在将use\u L10N=False设置为
日期输入格式=['%d/%m/%Y']
我还尝试在for loop上的forms.py oninit函数上使用:
if type(field.field.widget) is DateInput:
field.field.widget.input_formats = ['d%/%m/%Y']
我不仅尝试了列表,还尝试了类似于“%d/%m/%Y”的字符串
我还发现,即使我的输入是2017/01/01,也会发生此错误
我不知道我做错了什么。Django继续使用格式为“YYYY-MM-DD”的日期,即使我覆盖了DateField小部件的所有可能方法或参数
谢谢你们所有人,这将花费你们一些时间来帮助我 在表单上声明变量时,需要在DateInput小部件上设置格式,以及输入格式,如:
data_quota = forms.DateField(widget=forms.DateInput(format ='%d/%m/%Y'), input_formats=('%d/%m/%Y',), required=False)
您好,这是一个有趣的问题,但您可能希望将标题更改为“提交自定义日期格式的表单时验证错误”,以帮助人们在只看到标题时查找和理解您的问题。谢谢您的建议,我将立即执行!我将其添加到表单的字段中,但得到的验证错误与格式必须为“YYYY-MM-DD”的验证错误相同!,你知道它是什么吗?我不知道为什么,但如果我在我的ArchivioSearchView()函数中导入datetime,并使datetime.datetime.StrTime(request.GET.GET('data_quota'),%d/%m/%Y')正常工作,我不会收到任何其他错误
data_quota = forms.DateField(widget=forms.DateInput(format ='%d/%m/%Y'), input_formats=('%d/%m/%Y',), required=False)