美好的一天。 我有一个Django视图,可以搜索数据库中的项目。用户可以搜索电子邮件或订单号,同时过滤数据库,过滤日期。 如果我尝试搜索,我会将这些视为错误
[u“''的格式无效。必须在YYYY-MM-DD中 HH:MM [:ss [.uuuuuu]] [TZ]格式。“]
这是我的views.py
def search_form(request):
if request.method == 'GET':
user_search = request.GET.get('order')
print "What is searched for is : ", user_search
start_date = request.GET.get('first_date')
print "The start date is : ", start_date
end_date = request.GET.get('second_date')
print "The end date is : ", end_date
if user_search != None or start_date != None or end_date != None:
items = Order.objects.filter(Q(order_number__iexact=user_search) |
Q(client__email__iexact=user_search) |
Q(created_on__range=[start_date, end_date])
)
print "items ", items
错误指向Q(created_on__range=[start_date, end_date])
回溯:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
149. response = self.process_exception_by_middleware(e, request)
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
147. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "C:\Users\Uchechukwu\Dropbox\Engrs-Shared-Projects\JSA_WEB\jsa_admin\views.py" in search_form
926. Q(created_on__range=[start_date, end_date])
File "C:\Python27\lib\site-packages\django\db\models\manager.py" in manager_method
122. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in filter
790. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
808. clone.query.add_q(Q(*args, **kwargs))
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in add_q
1243. clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in _add_q
1263. current_negated, allow_joins, split_subq)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in _add_q
1269. allow_joins=allow_joins, split_subq=split_subq,
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in build_filter
1203. condition = self.build_lookup(lookups, col, value)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in build_lookup
1099. return final_lookup(lhs, rhs)
File "C:\Python27\lib\site-packages\django\db\models\lookups.py" in __init__
19. self.rhs = self.get_prep_lookup()
File "C:\Python27\lib\site-packages\django\db\models\lookups.py" in get_prep_lookup
57. return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_lookup
746. return [self.get_prep_value(v) for v in value]
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
1440. value = super(DateTimeField, self).get_prep_value(value)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in get_prep_value
1296. return self.to_python(value)
File "C:\Python27\lib\site-packages\django\db\models\fields\__init__.py" in to_python
1423. params={'value': value},
Exception Type: ValidationError at /dashboard/search_form/
Exception Value: [u"'' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]
答案 0 :(得分:2)
您检查了是否有任何参数不是None。但是,如果开始日期或结束日期都是“无”,则该检查将通过,但查询将因您看到的错误而失败。在过滤它们之前,您需要检查开始日期和结束日期是否为“无”。
答案 1 :(得分:2)
在heroku上部署代码时遇到了类似的问题。
将我的模型属性更正为
models.DateField(blank=True, null=True,default=datetime.date.today)
我删除了迁移/ *中的所有文件,并在本地和heroku上运行了迁移。
python manage.py makemigrations
python manage.py migrate
这有助于解决Heroku上的迁移问题。
答案 2 :(得分:1)
由于Django需要YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
格式的DateTimeField值,所以很可能发生此错误,并且您之前可能已经使用strftime
将其格式化为字符串,以使得Django无法正确识别哪个数字代表相应的日期时间变量(年,月,日,小时,分钟,秒,时区)。
您可以通过使用strptime
将字符串转换回日期时间来解决该问题。start_date = start_date.strptime(date_string, "YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]")
end_date = end_date.strptime(date_string, "YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]")
或者您只需删除命令
start_date.strftime("your_chosen_format")
end_date.strftime("your_chosen_format")
您以前使用它的地方。
答案 3 :(得分:0)
遇到了同样的问题,简单地解决了:
date = obj.date
time = obj.time
start_date = "%sT%s" % (date, time)