Django Queryset日期时间过滤器

时间:2016-04-01 12:52:24

标签: python django datetime django-1.9

我的一个模型中有一个格式化的列:

TEMP_START = models.DateTimeField(null=True)

我正在尝试使用查询集语法(如

)进行精确查找
x.filter(TEMP_START=my_datetime_object) # x can be thought of as y.objects.all()

当它应该执行多个对象时,它不返回任何对象。然而,

x.filter(TEMP_START__date=my_datetime_object.date()).filter(TEMP_START__hour=my_datetime_object.hour) 

返回正确的对象(它们每小时一次)。是否不支持直接日期时间过滤器,因此必须使用关键字?

======编辑结果不好:

Searching for: {'TEMP_START': datetime.datetime(2016, 3, 31, 2, 0)}

Values in column: [{'TEMP_START': datetime.datetime(2016, 3, 29, 8, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 29, 14, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 2, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 29, 20, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 8, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 20, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 31, 2, 0)}, {'TEMP_START': datetime.datetime(2016, 3, 30, 14, 0)}]

Values being returned: []


Code:
    args_timeframe_start = {variables.temp_start: self.ranked_timeframes[rank][variables.temp_start]}
    print(args_timeframe_start)
    print(self.query_data.values(variables.temp_start).distinct())
    query_data = self.query_data.filter(**args_timeframe_start)
    print(query_data.values(variables.temp_start).distinct())

1 个答案:

答案 0 :(得分:1)

你需要找出什么是my_datetime_object但很可能是因为DateTime字段包含python datetime.datetime个对象,datetime.datetime个对象由年,月,日,小时,分钟,秒组成,微秒。因此,如果您只是比较datehour,请确保您可以获得结果,但您无法保证my_datetime_object与数据库中具有相同分钟的某条记录相匹配,秒和微秒。

快速尝试,您可以看到日期时间的样子,django doc关于DateTimeField

from datetime import datetime
date = datetime.now()
print date