尽管它们以B格式存储,但仍在Django Admin中按A格式搜索DateField

如何解决尽管它们以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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?