Ошибка: для подклассов BaseDatabaseOperations может потребоваться метод datetime_extract_sql() … в фильтрации даты Django

#django #datetime #django-models #django-views #filtering

#django #datetime #django-модели #django-представления #фильтрация

Вопрос:

Я использую Django 2.2.12.

В models.py У меня есть модель имени, Webregister имеющая поле

created_on = models.DateTimeField(null=True, blank=True) который возвращает данные в формате 2020-09-04 22:17:00 00:00

Чтобы отфильтровать дату, я написал этот запрос

Webregister.objects.filter(created_on__date=date.today())

и он возвращает следующую ошибку,

NotImplementedError: subclasses of BaseDatabaseOperations may require a datetime_extract_sql() method

Однако он работает нормально, если я использую __year и выполняю следующий запрос,

Webregister.objects.filter(created_on__year="2020")

Пожалуйста, дайте мне знать, в чем проблема?

Ответ №1:

вы можете просто использовать обычный фильтр с объектами datetime или date, если они сопоставимы :

 class Model(models.Model):
    created_on = models.DateTimeField(null=True, blank=True)


data = Model.objects.filter(created_on__exact=datetime.now())
  

Ваша ошибка, вероятно, заключается в сравнении между вашим DateTimeField() (который является datetime объектом) и date.now() (который является date объектом)

Вы также можете использовать lt , gt но эти два данных должны быть сопоставимы