我正试图提出一个表单,让用户选择一个日期范围来生成Django中的web查询。在我的视图中,获取要筛选的日期时出错,无法删除日期。
这是我的forms.py
:
class ReportFiltersForm(forms.Form):
start_date = forms.DateField(input_formats='%Y,%m,%d',widget=SelectDateWidget())
end_date = forms.DateField(input_formats='%Y,%m,%d',widget=SelectDateWidget())
我的观点
if request.method == 'POST':
form = ReportFiltersForm(request.POST)
sdy = request.POST['start_date_year']
sdm = request.POST['start_date_month']
sdd = request.POST['start_date_day']
edy = request.POST['end_date_year']
edm = request.POST['end_date_month']
edd = request.POST['end_date_day']
start_date= datetime.date(sdy, sdm, sdd)
end_date= datetime.date(edy, edm,edd)
回溯
Traceback (most recent call last):
File "/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 651, in __call__
return self.application(environ, start_response)
File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 241, in __call__
response = self.get_response(request)
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 134, in get_response
return self.handle_uncaught_exception(request, resolver, exc_info)
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 154, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/home/projects/acms/cms/views.py", line 470, in eventreports
start_date= datetime.date(sdy, sdm, sdd)
TypeError: an integer is required
你在这里犯了很多错误。
首先,要修复您的
TypeError
,您需要将数据强制转换成int
,如下所示:然而,这是一种非常糟糕的做事方式。首先,必须在每个字段周围放置
try/except
块,以确保用户输入的是整数而不是字符串。既然您已经在使用Django表单,为什么不让它为您做所有的工作呢?以下是您将如何做到这一点:
这是一种更好的做事方式,有几个原因。使用这种方式,您可以让Django负责为您验证用户输入。此外,它还将把这些数据投射到
datetime.date
对象中。最后,如果用户输入了无效数据,它将允许您向用户提供更好的错误消息。相关问题 更多 >
编程相关推荐