Как определить диапазон дат, который охватывает годы, месяцы в Джанго? - PullRequest
1 голос
/ 31 октября 2011

У меня есть модель Django, которая содержит поле даты:

class Event(models.Model):
    event_date = models.DateField()

Мне бы хотелось, чтобы в этой модели был менеджер, отображающий только события, произошедшие за период, определенный с 1 июля (ТЕКУЩИЙ ГОД) до 31 июня (СЛЕДУЮЩИЙ ГОД).

Итак, в этом году я хотел бы вернуть события, начинающиеся с 1 июля 2011 года, до 31 июня 2012 года. И когда текущая дата достигнет 1 июля 2012 года, мы покажем события, происходящие до 31 июня 2013 года.

Как бы я поступил так?

Спасибо!

1 Ответ

3 голосов
/ 31 октября 2011

Прямо из документов:

start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Event.objects.filter(event_date__range=(start_date, end_date)

https://docs.djangoproject.com/en/dev/ref/models/querysets/#range

Таким образом, единственной проблемой является выяснение текущего года и корректировка начальной и конечной даты, чтобы отразить это. Один менеджерский подход:

class EventManager(models.Manager):
    def get_query_set(self):
     # Quick check to see what dates we should search within
     return super(EventManager, self).get_query_set().filter(event_date__range=(start_date, end_date))

class Event(models.Model):
    this_year = EventManager()
    ...

Теперь вы можете запросить:

Event.this_year.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...