Получение запроса между диапазоном дат Django - PullRequest
0 голосов
/ 03 марта 2020

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

Я получаю ошибку TypeError: требуется целое число (полученный тип str)

views.py

import datetime
import pytz

first_date = "2020-01-01 19:17:35.909424"
last_date = timezone.now()

Я не хочу ничего возвращенного, у которого есть дата в будущем

Вот фильтр в запросе

.filter(hide_sentance_until=(date(first_date), date(last_date)))

Это полный набор запросов, но это вышеупомянутый фильтр, вызывающий проблему

zip_flash_sentances = (
    model.objects
    .filter(show_sentance=True)
    .filter(
        hide_sentance_until=(date(first_date), date(last_date))
    )
    .order_by("?")
    .filter(username_id = user_id_fk)
    .values_list('sentance_eng', 'sentance_esp', 'id')
    .first()
 )

Я думал, что это может быть проблема сравнения с датами, но вот мое поле модели

models.py

hide_sentance_until = models.DateTimeField(default=datetime.now(), blank=True)

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Одна вещь заключается в том, что вы указываете конкретное значение c, которое определяется, когда ваш код компилируется как значение по умолчанию. Чтобы текущая текущая дата была желаемым значением:

hide_sentance_until = models.DateTimeField(default=datetime.now, blank=True)

Затем необходимо проанализировать дату и время из строки.

date_value = datetime.strptime(first_date, DATETIME_FORMAT_YOU_USE)

Где DATETIME_FORMAT_YOU_USE - это серия кодов формата из Python, которые вы используете.

Наконец, вы должны использовать поиск поля набора запросов __range.

.filter(
    hide_sentance_until__range=(date_value, timezone.now())
) 
0 голосов
/ 03 марта 2020

Вы можете использовать gte и lte атрибуты запроса:

first_datetime = datetime.datetime.strptime(first_date, '%Y-%m-%d %H:%M:%S.%f')
last_date = timezone.now()


.filter(hide_sentance_until__lte=last_date,hide_sentance_until__gte=first_time)
...