如何编写Django查询以匹配DateTime列的分钟字段?
Django DateTime字段分钟匹配查询解决方案
你只需将代码中的xxx替换为Django ORM内置的时间字段查找器created__minute即可实现需求,Django 3.2 + PostgreSQL 9.6的环境完全支持该特性。
修正后的完整代码如下:
import datetime from datetime import timedelta from django.db import models class PriceQuoteManager(models.Manager): def get_prices_per_hour(self, item): now = datetime.datetime.now() end_time = now.replace(second = 0, microsecond = 0) start_time = end_time - timedelta(days=1) return PriceQuote.objects.filter( item=item, created__range=[start_time, end_time], created__minute=end_time.minute ) class PriceQuote(models.Model): # 其他字段定义 created = models.DateTimeField(null=False, default=datetime.datetime.now) # 绑定自定义管理器 objects = PriceQuoteManager()
补充说明:
__minute是Django针对DateTime/Time类型字段内置的查找规则,底层会自动生成对应PostgreSQL的EXTRACT('minute' FROM created)SQL逻辑,匹配字段的分钟部分值。- 若项目开启了时区配置
USE_TZ = True,该查找会自动将存储的UTC时间转换为项目配置的时区后再提取分钟值,符合业务时区要求。 - 注意原代码中的
PriceQuoteManager需要继承models.Manager才能正常作为模型管理器使用,需要补上继承关系。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

