[u“''的格式无效。必须是YYYY-MM-DD HH:MM [:ss [.uuuuuu]] [TZ]格式。”]

时间:2016-04-04 14:56:36

标签: python django date

美好的一天。 我有一个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."]

4 个答案:

答案 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)