python - 如何清理可选的 Django 表单字段
问题描述
我有一个带有可选字段的 Django 搜索表单。如果使用该字段,则应在clean_{field_name}
. '>' not supported between instances of 'NoneType' and 'datetime.date'
但是,当该字段为空时,我不断收到错误消息。当我做一个Request URL:http://localhost:8000/dockets/p_CentralGrocers/
(所以根本没有传递查询参数)时,cleaned_data
参数仍然有一个字段名称的空白项,这会导致日期时间与空白字段进行比较,从而导致错误。在清洁过程中处理可选字段的最佳方法是什么?
1 from django import forms
2 from django.core.exceptions import ValidationError
3 from django.utils.translation import ugettext_lazy as _
4 import datetime
5
6 class SearchDocketForm(forms.Form):
7
8 from_date = forms.DateField(help_text="Enter start date for search", required=False)
9 to_date = forms.DateField(help_text="Enter to date for search", required=False)
10
11 def clean_from_date(self):
12 data = self.cleaned_data['from_date']
13 if not data return ''
14
15 # check if date is in the past
16 if data > datetime.date.today():
17 raise ValidationError(_('Invalid date - from date in the future'))
18 return data
解决方案
首先,我相信
'>' not supported between instances of 'NoneType' and 'datetime.date'
是解析的问题。
当您发布数据时,数据将只是字符串。例如:“01/01/2001”如果您发布任何值,它将是数据的值。
您必须在比较之前将其更改为 datetime 对象。
from datetime import datetime
.....
def clean_from_date(self):
data = self.cleaned_data['from_date']
if not data return ''
# Parse according to the format you're planning to post.
data = datetime.strptime(data, "%D %M %Y")
if data > datetime.date.today():
raise ValidationError(_('Invalid date - from date in the future'))
return data
其次,验证您是否有任何
from_date = models.DateField(default=datetime.now())
在models.py中设置。
提示:在 if 语句之前尝试 print(data),它将在控制台中为您提供数据内容。
推荐阅读
- php - Yii2 - 在哪里声明 $variable 用于 adminlte left.php 布局
- c# - Xamarin Forms IOS - 尝试启动进程和运行文件时访问被拒绝
- logstash - 用于登录 filebeat.yml 的多行模式表示法
- excel - 检查重复项时出现 VBA 运行时错误 1004“应用程序定义或对象定义错误”
- c - #include .c 源文件是否可以用于嵌入式 C 代码的可维护性?
- django - 未使用 CROS 设置 Django 会话
- hadoop - 无法在 GCP 上打开 cloudera 管理器
- angular - Angular http请求可观察错误没有捕获错误?
- javascript - 为什么图像未找到错误出现在角度 6 中?
- maven - 如何解决“在当前项目和插件组中找不到前缀'surefire_report'的插件”