фильтрация django по дате и времени = нет

У меня есть таблица с метаданными по измерению поля, в которой поля «startDate» имеют тип datetime. Значение может быть пустым, если информация недоступна. Я хотел бы запустить некоторую статистику по этому полю и получить минимальное и максимальное значение (т.е. самые старые измерения, доступные по всем записям). Нет проблем для Max, но для Min агрегация возвращает None (значение в пустых полях).

Итак, моя идея состоит в том, чтобы отфильтровать эти записи из набора запросов перед запуском агрегата. Я не могу найти, как это сделать.

я пытался

oldestdate = Measurement.object.filter(startDate__isNull=True).aggregate(Min('startDate'))['startDate__min']

Любая идея, что не так, или как это сделать?

РЕДАКТИРОВАТЬ: еще несколько тестов показывают, что:

Measurement.objects.filter(startDate_isnull=True) -> only records with startDate = None
Measurement.objects.filter(startDate_isnull=False) -> all records, also the ones with startDate = None. 
Measurement.objects.exclude(startDate__isnull=False) -> only records with startDate = None
Measurement.objects.exclude(startDate__isnull=True) -> shows all records (also startDate == None)

person Bart P.    schedule 06.03.2013    source источник


Ответы (1)


person    schedule
comment
Это не работает. Поля с None не отфильтровываются. oQuery = WindWaveFile.objects.all() oQuery.exclude(startDate__isnull=True).aggregate(Min('startDate'))['startDate__min'].strftime(%d/%m/%Y %H:%M). Из-за этого strftime вызывает исключение (объект ошибки «NoneType» не имеет атрибута «strftime») - person Bart P.; 11.03.2013
comment
правильно, в версии, которую я выложил ранее, часть strftime еще не была добавлена. Однако исходная проблема остается, фильтр не распознает None. - person Bart P.; 11.03.2013
comment
ass bypass Теперь я фильтрую все с определенной даты (10 лет назад), и это работает (и я могу использовать strftime). Но это не чистое решение (поскольку я никогда не должен быть на 100% уверен, что все даты моложе 10 лет). - person Bart P.; 11.03.2013
comment
Попробуйте протестировать вот так oldestdate = Measurement.objects.filter(startDate__isnull=True), фильтруется ли None или нет. Таким образом будет знать, в чем проблема - person catherine; 11.03.2013
comment
другая функция меняется при обновлении django до последней версии. - person catherine; 11.03.2013
comment
Хорошо, теперь, если вы хотите что-то отладить, просто разделите это и протестируйте один за другим, пока все не заработает :) - person catherine; 11.03.2013
comment
спасибо Екатерина. еще одно тестирование показывает, что startDate_isnull=True показывает только записи с startDate = None, но startDate_isnull=False не делает обратного. то есть он возвращает все записи, в том числе те, у которых startDate = None. Но, к моему удивлению, переключение на исключение делает обратное. exclude(startDate__isnull=False) показывает только записи с startDate=None, а exclude(startDate__isnull=True) показывает все записи (также startDate == None) - person Bart P.; 11.03.2013
comment
да, filter() и exclude() делают противоположное - person catherine; 11.03.2013