我创建了一个上传xlsx函数,解析每一行并将每一行数据添加到字典中,然后我用一个表单验证这个字典,在这个表单中,我有一个DateField,如果在xlsx单元格中有我需要的正确格式化日期,在我的字段中一切正常,表单有效,我可以做任何我想做的事情,但是如果单元格有一个不正确的格式化日期,它会抛出这个错误:
Internal Server Error: /core/process_upload_file
Traceback (most recent call last):
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 106, in _get_response
response = middleware_method(request, callback, callback_args, callback_kwargs)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/debug_toolbar/middleware.py", line 85, in process_view
response = panel.process_view(request, view_func, view_args, view_kwargs)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/debug_toolbar/panels/profiling.py", line 160, in process_view
return self.profiler.runcall(view_func, *args, **view_kwargs)
File "/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/cProfile.py", line 109, in runcall
return func(*args, **kw)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/Users/alex/Documents/Projects/Django/platform/application/core/views.py", line 567, in process_upload_file
if form.is_valid():
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/forms.py", line 185, in is_valid
return self.is_bound and not self.errors
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/forms.py", line 180, in errors
self.full_clean()
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/forms.py", line 381, in full_clean
self._clean_fields()
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/forms.py", line 399, in _clean_fields
value = field.clean(value)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/fields.py", line 148, in clean
value = self.to_python(value)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/fields.py", line 410, in to_python
return super().to_python(value)
File "/Users/alex/Documents/Projects/Django/platform/venv/lib/python3.6/site-packages/django/forms/fields.py", line 386, in to_python
raise ValidationError(self.error_messages['invalid'], code='invalid')
KeyError: 'invalid'这是表单域:
date = forms.DateField(input_formats=['%d.%m.%Y'], widget=forms.DateInput(format='%d.%m.%Y'))我想抛出一个验证错误,指出格式不正确,但从我看到的情况来看,django试图抛出这个无效的验证错误,但它并不存在。我不能用clean_field()来做这件事,因为这个字段在到达我的clean函数之前就验证了它的格式。
例如,如果单元格值为: 22.02.2020,则可以,但如果单元格值为22/02/2020,则会抛出500错误。不知道为什么。我希望有人能给我解释一下,或许能给我一个解决方案。
发布于 2020-12-11 01:41:02
因为它是在表单clean_field验证之前在模型中验证的。
在模型中,日期字段以settings.py文件中指定的格式保存数据
USE_L10N = False
DATE_INPUT_FORMATS = ['%d-%m-%Y',
'%d/%m/%Y',
'%d.%m.%Y'] 在form.py中
from django.conf import settings
date = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS, widget=forms.DateInput(format='%d.%m.%Y'))https://stackoverflow.com/questions/57884665
复制相似问题