Queryset ".dates (...)" возвращает не определенный DateTimeQueryset объектов datetime - PullRequest
0 голосов
/ 09 февраля 2012

Для QuerySet записей в блоге я хочу создать DateQuerySet месяцев, в которые были сделаны эти сообщения.Запрос:

dates = Entry.published.all().dates('pub_date', 'month')

Согласно документам

"Месяц" возвращает список всех различных значений года / месяца для поля.

Если у меня есть 4 записи с датами:

  • (2012 г., 3 февраля)
  • (2012 г., 2 февраля)
  • (2012 г., 24 января)
  • (2011 г., 28 декабря)

Я ожидаю получить 3 объекта datetime;один для Dec, Jan, Feb, вместо этого я возвращаю 4, по одному на каждую из исходных дат

Это ожидаемое поведение?Я попытался добавить distinct() к запросу, но он по-прежнему возвращает каждую дату.


ОБНОВЛЕНИЕ

Простой способ исправить это сделать Set из DateQuerySet:

dates = Entry.published.all().dates('pub_date', 'month')
return set(dates)

Thisудаляет дубликаты datetime объектов, но я до сих пор не понимаю, почему это происходит (или если я неправильно понимаю, как работает date ())

1 Ответ

1 голос
/ 09 февраля 2012

Ваши симптомы звучат так же, как GROUP BY запрос с упорядочением.

Вы можете print query.query проверить, применяется ли порядок к полю, который будет добавлен к SELECT, что также делает все эти элементы различными.

Entry.published.dates('pub_date', 'month').order_by() 
...