Django - сопоставить datetimeField/timeField и сравнить

Я хочу сравнить DateField и TimeField в наборе запросов с текущей датой. Я искал часами, но ничего не нашел. Много пробовал с Q/F-Object, но тоже не нашел решения. И теперь я здесь и надеюсь, что кто-то знает, как решить эту проблему:) - Кстати. разделение на дату и время не моя вина, и нет никакого способа изменить его на DateTimeField (слишком много зависимостей в других проектах).

class Model(models.Model):
    date = models.DateField()
    time = models.TimeField()

В MySQL я бы сделал что-то вроде:
SELECT * FROM app_model WHERE CAST (CONCAT (CAST (дата в виде CHAR),' ',CAST(время в виде CHAR)) в качестве DATETIME) >= NOW()

Спасибо за любые предложения!

1 ответ

Решение

Вы можете сделать это с помощью или запретить набор запросов (объекты Q):

now = datetime.datetime.now()
future_models = Model.objects.filter(Q(date__gt=now.date()) | (Q(date=now.date()) & Q(time__gte=now.time())))

При этом выбираются все экземпляры, для которых дата прошла сегодня, и все экземпляры, для которых дата является сегодняшней, а время больше или равно текущему времени.

Другие вопросы по тегам