【问题标题】:Convert datetime object inside Django ORM query [duplicate]在Django ORM查询中转换日期时间对象[重复]
【发布时间】:2019-05-12 20:28:41
【问题描述】:

我想按年份过滤从日期时间对象中获取的查询集,但不允许使用关键字的方法。因此,以下将引发错误:

a = Activity.objects.filter(start_date.year=2018)

还有其他方法吗?

【问题讨论】:

标签: python django


【解决方案1】:

Django 有一个__year lookup [Django-doc],所以我们可以用 double 下划线 (__) 来写:

Activity.objects.filter(<b>start_date__year</b>=2018)

请注意,日期时间中的日期可能是“时区敏感的”,documentation 提到:

USE_TZTrue 时,日期时间字段在过滤前转换为当前时区。

因此这可能会产生功能影响,例如,如果日期时间在一个时区的 2018 年 1 月 1 日 00:01 注册,那么对于另一个时区,这可能不在 2018 年。

【讨论】:

  • 谢谢!如果我想将自定义函数(Django 未涵盖)应用于关键字怎么办?还是关键字不能是表达式的 Pyton 限制?
  • @barciewicz: 不,你不能只为ORM表达式指定一个Python函数,你可以尝试使用Expressionslookups来翻译问题,但如果不能用那/表达它是不可行的,您需要在 Python 级别进行过滤。数据库通常不允许循环等,或者没有很多技巧。
猜你喜欢
  • 2019-12-29
  • 2021-08-08
  • 2013-03-03
  • 2016-11-11
  • 1970-01-01
  • 2011-12-11
  • 2020-04-03
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多