2015-09-22 2 views
3

У меня есть модель Джанго, которая выглядит следующим образом:Джанго дня и месяц дата события запрос

class Event(models.Model): 
    name = model.CharField(...etc...) 
    date = model.DateField(...etc...) 

Что мне нужно, это способ получить все события, которые на данный день и месяц - очень похож на " в этот день ".

def on_this_day(self,day,month): 
    reutrn Events.filter(????) 

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

ответ

4

Вы можете сделать запрос, как это, указав день и месяц:

def on_this_day(day, month): 
    return Event.objects.filter(date__day=day, date__month=month) 

Это, скорее всего, сканирует таблицы базы данных с помощью операторов SQL, как MONTH(date) и DAY(date) или какой-либо поиска эквивалентных

Вы можете получить лучшую производительность запроса, если вы добавите и индексируете Event.day и Event.month (если Event.date внутренне хранится как int в БД, он делает его менее приспособленным к вашему (day, month) запросов)

Вот несколько документов от Django: https://docs.djangoproject.com/en/dev/ref/models/querysets/#month

Смежные вопросы