首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Djando DateField抛出“无效”

Djando DateField抛出“无效”
EN

Stack Overflow用户
提问于 2019-09-11 16:01:10
回答 1查看 30关注 0票数 1

我创建了一个上传xlsx函数,解析每一行并将每一行数据添加到字典中,然后我用一个表单验证这个字典,在这个表单中,我有一个DateField,如果在xlsx单元格中有我需要的正确格式化日期,在我的字段中一切正常,表单有效,我可以做任何我想做的事情,但是如果单元格有一个不正确的格式化日期,它会抛出这个错误:

代码语言:javascript
复制
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'

这是表单域:

代码语言:javascript
复制
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错误。不知道为什么。我希望有人能给我解释一下,或许能给我一个解决方案。

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 01:41:02

因为它是在表单clean_field验证之前在模型中验证的。

在模型中,日期字段以settings.py文件中指定的格式保存数据

代码语言:javascript
复制
USE_L10N = False

DATE_INPUT_FORMATS = ['%d-%m-%Y',
                      '%d/%m/%Y',
                      '%d.%m.%Y'] 

在form.py中

代码语言:javascript
复制
from django.conf import settings
date = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS, widget=forms.DateInput(format='%d.%m.%Y'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57884665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档