Как использовать Django ORM для запроса только по дате в поле datetime - PullRequest
2 голосов
/ 15 января 2011

У меня есть таблица с DataTimeField.Я хотел бы получить список всех объектов, где DateTimeField = определенный день (игнорируя часть времени).

SQL будет выглядеть примерно так:

select * from tblname where date(start)='2011-01-14'

ЭтоМожно ли заставить ORM выполнить такой запрос?

Я могу выполнить запрос start__range (...), но мне было интересно, смогу ли я сделать это другим способом.

Ответы [ 2 ]

4 голосов
/ 15 января 2011

Из справочника QuerySet API :

Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__day=6)

Это работает для дат и дат.

2 голосов
/ 15 января 2011
MyModel.object.filter(start__year=2011, start__month=01, start__day=14)

проблема с этим запросом состоит в том, что если ваша БД не поддерживает индекс с функциями (Hello MySQL), у вас есть неэффективный запрос.

Одной из альтернатив может быть добавление нового поля start_date = models.DateField(...) и перегрузка метода save(...) для правильной установки поля, или, если вы являетесь более разработчиком на стороне базы данных, используйте триггер для той же функции, после этого, Вы можете сделать:

MyModel.object.filter(start_date=date(2011, 1, 13))
...