如何解决尽管它们以B格式存储,但仍在Django Admin中按A格式搜索DateField
|| 正在构建Django应用。并且要求管理员能够基于查询来搜索项目,其中查询可能还包括月份,年份等的名称。 问题(我似乎无法在SO上或其他地方找到解决方案)是Django中日期的默认格式(好了,日期被保存到数据存储区的方式)是%Y-%m -%d,但我希望能够从Django Admin搜索中搜索诸如\“ June \”之类的查询。 如何使使用自定义日期格式的日期字段搜索成为可能,而无需转换保留日期的格式?解决方法
日期和时间作为它们的独特类型存储在数据库中,因为您应该能够执行特殊的日期时间操作,例如大于,小于和不仅仅是字符串搜索。
Django ORM接受日期时间作为格式为标准格式的字符串,其中包括字符串,整数和
datetime
对象。
例:
Entry.objects.filter(pub_date__year=2006)
要么
Entry.objects.filter(
... headline__startswith=\'What\'
... ).exclude(
... pub_date__gte=datetime.now()
... ).filter(
... pub_date__gte=datetime(2005,1,1)
... )
您可以使用多个库中的任何一个将字符串中的时间解析为“ 0”
对象。最简单的方法是使用很棒的dateutil
库:
import dateutil.parser
dateutil.parser.parse(\'2008-08-09T18:39:22Z\')
#Following is returned
datetime.datetime(2008,8,9,18,39,22,tzinfo=tzutc())
, 您可能已经找到了答案,但对仍在研究此问题的某人(例如我自己!)可能有用。
Django 1.6+:
您可以自定义搜索结果:
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_search_results
先前的Django版本:
您只需要使用自己的ChangeList即可临时更改查询字符串中的日期格式。请注意,格式只是暂时更改,因此用户不会在查询字符串中看到任何更改。
下面的示例接受英国日期格式,例如\'1999年12月31日\',但可以轻松更改为接受任何日期格式(或@nemesisfixx要求的\\ June \等月份名称)
在您的管理模型中,自定义变更列表类:
class MyModelAdmin(admin.ModelAdmin):
...
def get_changelist(self,request,**kwargs):
\"\"\"
Returns the ChangeList class for use on the changelist page.
\"\"\"
return MyChangeList
然后在MyChangeList类中:
class MyChangeList(ChangeList):
def get_query_set(self,request):
# Allow date search with UK format
try:
date_search = datetime.datetime.strptime(self.query,\'%d %b %Y\').date().strftime(\'%Y-%m-%d\')
except ValueError:
date_search = self.query
with temporary_value(self,\'query\',date_search):
qs = super(MyChangeList,self).get_query_set(request)
return qs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。