Получение ошибки "NotImplementedError" при использовании TruncMonth в Django QuerySet

Я полный новичок, когда дело доходит до программирования и Django.

Что я использую: Django 2.2.8 pymongo 3.12.1 djongo 1.3.6 MongoDB 3.6.23

Я пытаюсь создать набор запросов, в котором я беру дату из моей базы данных и группирую ее по месяцам. Дата из базы данных, из которой я беру дату, имеет формат "2022-11-26T00:00:00.000+00:00". Поэтому я пытаюсь создать новое поле, содержащее только месяц, используя TruncMonth, чтобы затем сгруппировать по месяцам. Я также пытался использовать "extract", но это, похоже, тоже не работает.

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

Я делал это в оболочке python, пока не получил нужные результаты. Вот мой код:

models.py:

class Charts(models.Model): severity_type = models.CharField(max_length=25) num_findings = models.IntegerField() finding_date = models.DateTimeField()

python shell:

`>>>из charts.models import Charts

from datetime import datetime из django.db.models.functions import TruncMonth Charts.objects.annotate(month=TruncMonth('finding_date')).values('month')`

.

#Выдаёт эту ошибку

    `NotImplementedError: subclasses of BaseDatabaseOperations may require a datetime_trunc_sql() method`

Из того, что я исследовал, это как-то связано с тем, что поле является datetime, а не date, как я полагаю. Я нашел эту статью, которая, кажется, находится на правильном пути, но не может выполнить.

Другая полезная информация: когда я запускаю Charts.objects.values('finding_date'), он возвращает: [{'finding_date': datetime.datetime(2022, 11, 26, 0, 0, tzinfo=)}, ... и т.д. Таким образом, я знаю, что поле является datetime.datetime.

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

Думаю, вы хотите использовать Extract вместо TruncMonth. См. здесь

https://docs.djangoproject.com/en/4.1/ref/models/database-functions/#extract

На этой странице вы найдете пример, где они извлекают год из поля datetime

>>> experiment = Experiment.objects.annotate(
...    start_year=Extract('start_datetime', 'year')).get()
>>> experiment.start_year
2015

Я уверен, что если вы используете Extract вместо TruncMonth и используете 'month' вместо 'year', все должно работать.

Дайте мне знать, как это происходит!

Вернуться на верх