Виберіть між Джанго дві дати


116

Я хочу зробити запит, який вибирає дати з Django.

Я знаю, як це зробити із сирим SQL досить легко, але як це можна досягти, використовуючи ORG Django?

Тут я хочу додати запит між датами 30 днів:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

Відповіді:


230

Використовуйте __rangeоператора:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

Чи є "created_at" довільним полем у моделі чи це фактичний журнал баз даних, коли створено запис?
Bigbob556677

@ Philip556677 Це довільне поле в моделі. Ви можете встановити для параметра Auto_now_add DateField значення True, щоб легко його було встановлено.
Benbb96


1

два методи

.filter(created_at__range=[from_date, to_date])

інший метод

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte означає більше, ніж дорівнює
  • lte означає менше, ніж дорівнює

Q Об'єкти непотрібні у другому способі, ви можете написати:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

Якщо ви користуєтесь DateTimeField, фільтрування з датами не включатиме елементи за останній день.

Значення потрібно відмітити як дату:

...filter(created_at__date__range=(start_date, end_date))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.