Возврат верхней даты в диапазоне DateTimeTZRange

У меня есть модель, в которой есть поле под названием диапазон дат. которое возвращает диапазон дат, оба диапазона дат одинаковы, но время меняется, как я могу получить доступ к одной дате из диапазона в модели, используя ORM.

class My_model(models.Model):
     date_range = ranges.DateTimeTZRange()

Похоже, что к нему можно получить доступ с помощью upper и lower

obj = My_model.objects.all().first()
obj.date_range.upper
obj.date_range.lower

Это поле также присуще RangeField. Все это находится в contrib\postgres\fields\ranges.py если это хоть немного поможет

А вот некоторые Query Stuff, которые вам нужны: https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/fields/#querying-range-fields


Редактирование, Агрегация

Источник: Django/Postgres: Aggregate on RangeField

from django.db.models.functions import Upper, Lower
aggrDict = My_model.objects.all().aggregate(
    low=Min(Lower('date_range')),
    high=Max(Upper('date_range'))
)
print(aggrDict['low'])
print(aggrDict['high'])

Редактирование 2, фильтр

Если вы просто хотите вернуть товар, до которого осталось 20 дней, вы можете сделать следующее:

from datetime import datetime, timedelta
twenty_days_in_the_future = (datetime.now()+timedelta(days=20)).date()

from django.db.models import Case, When, Value, IntegerField
My_model.objects.filter(date_range__lower=twenty_days_in_the_future)


# It might need a __date, idk
My_model.objects.filter(date_range__lower__date=twenty_days_in_the_future)
Вернуться на верх