1

У меня есть следующие модели:Использование Django, как я могу достичь этого в одном запросе?

class Ticket(models.Model): 
    # ... other fields omitted 
    active_at = models.DateTimeField() 
    duration = models.DurationField() 

Учитывая now = datetime.now(), я хотел бы получить все записи, для которых now находится между active_at и active_at + duration.

Я использую Django 1.8. Вот DurationField docs.

+1

Вы просмотрели [объекты F] (https://docs.djangoproject.com/en/dev/topics/db/queries/#filters-can-reference-fields-on-the-model)? – xnx

ответ

3

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

Если это работает, вы можете использовать следующий запрос:

from django.db.models import F 

active_tickets = Ticket.objects.filter(active_at__lte=now, 
             active_at__gt=now-F('duration')) 

Объект F относится к полю в базе данных, duration в этом случае.