2016-04-01 3 views
0

У меня есть столбец, отформатированный как таковой в одном из моих моделей:Джанго QuerySet Datetime Фильтр

TEMP_START = models.DateTimeField(null=True) 

И я пытаюсь сделать точный поиск с помощью QuerySet синтаксиса,

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()) 
+0

Пожалуйста, покажите то, что вы делаете, а не использовать содержание наполнителя, как 'my_datetime_object'. Нам будет полезно узнать, как вы на самом деле делаете вещи, и откуда происходят переменные. – rnevius

+0

У 'TEMP_START' и' my_datetime_object' есть точные значения? – v1k45

+0

Также обратите внимание, что «точно такой же» должен включать часы, минуты, секунды, миллисекунды и часовой пояс ... –

ответ

1

Вы должны выяснить, что my_datetime_object, но, скорее всего, потому, что DateTime поля содержат питона datetime.datetime объекты, объекты datetime.datetime состоит из год, месяц, дата, час, минута, секунда, микросекунда. Поэтому, если вы просто сравниваете date и hour, убедитесь, что вы можете получить результаты, но вы не можете гарантировать, что my_datetime_object соответствует одной из записей в вашей базе данных, имеющих ту же минуту, секунду и микросекунду.

Попробуйте это быстро, и вы можете увидеть, что делает DATETIME выглядеть, также django doc о DateTimeField:

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

Все остальные поля равны нулю и не имеют набора часового пояса (на любом объекте) – um8ra

+0

Как вы получили 'my_datetime_object'? –

+0

TEMP_START = models.DateTimeField (null = True). По сути, я оцениваю время и просматриваю n-й объект на основе ввода пользователем. Поэтому, когда я говорю objectis в поле модели. Это гарантировано. Вот откуда оно взялось. – um8ra