2010-11-21 1 views
3

У меня есть список людей, каждый из которых имеет дату рождения, которая, как ожидается, хранится в DateField. Я пытаюсь создать список тех людей, отсортированных по месяцам и дням их рождения (без учета года) - у вас есть вид «кто наступает день рождения».Заказ Django QuerySet на месяц/день datetime?

Я не могу представить QuerySet значение datetime.month человека. Есть ли способ, которым это можно было бы сделать без необходимости прибегать к принуждению к list()?

Заранее благодарим за участие и прошу сообщить, если вопрос нуждается в разъяснении.

ответ

5

Вы можете использовать QuerySet.extra() определить поле месяц и сортировать по ним:

SomeModel.objects.extra(select={'birthmonth': 'MONTH(birthdate)'}, 
    order_by=['birthmonth']) 
+4

Спасибо за быстрый ответ! Просто хотел уточнить те, которые используют PostgreSQL для замены «MONTH (birthdate)» на «EXTRACT (MONTH FROM birthdate)». –

+0

Правильное имя метода добавочно – falko

+0

Насколько мне нравится этот ответ, кажется, что метод QuerySet.extra() находится на блоке прерывания и в конечном итоге будет устаревшим. В документах django говорится: «Используйте этот метод как последнее средство» и «Это старый API, который мы стремимся в какой-то момент в будущем». – jbiz