页面上的数据表可以通过用户输入进行过滤。在ajax查询中收到输入的字符串,我试图通过此字符串过滤对象。字符串字段过滤得很好,但是当我尝试过滤日期时:
querySet.filter(datefield__icontains=searchString)
导致MySQL异常: 警告:日期时间值不正确:' %%'对于专栏''在第1行
有没有办法使用字符串过滤日期字段?
答案 0 :(得分:3)
您需要create a datetime
objects from the string然后使用该对象进行过滤。您可能希望过滤日期大于或小于datetime对象的对象。为此,您可以使用filter(datefield__gt=datetime_obj)
或filter(datefield__lt=datetime_obj)
答案 1 :(得分:2)
我不确定在过滤日期数据时你会想到的图标可以做什么,所以你可能想重新考虑或澄清你的期望。
总的来说,您正在尝试根据日期字段进行查询。你有2个选择。您需要将sting转换为日期(或日期时间)对象,或者需要将字符串格式化为" yyyy-mm-dd"。
- 编辑 -
因为看起来你真的想要使用字符串来搜索日期,所以这里有一些澄清。
你要做的事情将是难以做到的。我不能接近边界线。 Django正在将您的查询转换为SQL并查询您的数据库。仅仅因为ORM不能使它能够在SQL中执行不可能的事情(实际上ORM极大地限制了你可以做的事情)。但是,您有几种选择:
Q
中的django.db.models
个对象来构造复杂的OR查询。当它以任何合理的数字或记录到达数据库时,这可能会很慢。raw
查询。或多或少你要求的东西很难。在我看来,最可行的选择是转换为使用haystack。我无法强调那有多少弊端。您正在处理搜索引擎结果而不是模型实例。在某些情况下,这不是一个问题,但根据要求,这可能会非常痛苦。