【问题标题】:How to do text based filtering on DateTimeFields using a specific template format?如何使用特定模板格式对 DateTimeFields 进行基于文本的过滤?
【发布时间】:2021-02-13 15:13:44
【问题描述】:

我有一个表,其中包含使用 django 模板语言显示的 CharFields 和 DateTimeFields。 DateTimeFields 以“2020 年 8 月 18 日,下午 6:33”的格式显示。有没有一种简单的方法可以根据该特定格式对 DateTimeFields 进行基于文本的过滤/查询?例如,搜索“aug”或“Aug”或“Aug. 18”或“2020”应该会找到该条目。

我尝试过 icontains,但这似乎适用于底层格式,而不是显示格式。例如,搜索“2020-08”会找到该条目,但搜索“Aug”不会。

作品:

Entry.objects.get(created__icontains='2020')
Entry.objects.get(created__icontains='2020-08')
Entry.objects.get(created__icontains='33')

不起作用:

Entry.objects.get(created__icontains='Aug')
Entry.objects.get(created__icontains='6:33')
Entry.objects.get(created__icontains='p.m')
  1. 有没有办法使用特定的日期时间显示格式进行搜索?
  2. 底层的 DateTimeField 是什么格式?是否依赖于数据库?

2 的部分答案:底层格式似乎是格式中的 UTC “2020-05-12 18:58:23.210862+00”。在任何文本上使用图标都可以。

为了澄清,这个想法是搜索具有相同文本的所有字段(日期时间和字符串)。因此,“Aug”应该返回一个日期字段为“Aug 13”或字符串字段为“Augustine”的行。有点像一般的谷歌搜索。

【问题讨论】:

    标签: django django-filter


    【解决方案1】:

    您已将字符串更改为日期时间, 像这样:date = datetime.date(2020, 8, 3), 这是你可以使用的:

    • 日期:Entry.objects.filter(created__date=datetime.date(2005, 1, 1))
    • 年份:Entry.objects.filter(created__year= 2020)
    • 月:Entry.objects.filter(created__month=8)
    • 小时:Event.objects.filter(created__hour=6)
    • 分钟:Event.objects.filter(created__minute=29)
    • 秒:Event.objects.filter(created__second=31)

    您可以在此处查看有关日期查询集的更多信息:https://docs.djangoproject.com/en/3.1/ref/models/querysets/#year

    【讨论】:

    • 谢谢。明白这是一种方法。但是这个问题是是否可以在显示格式上使用纯文本来完成。这个想法是使用相同的文本搜索所有字段(日期时间和字符串)。因此,“Aug”应该返回一个日期字段为“Aug 13”或字符串字段为“Augustine”的行。有点像一般的谷歌搜索。
    • 对不起,我的英语很基础,不能用文字搜索所有字段,你必须选择日期类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2017-04-02
    相关资源
    最近更新 更多