Получение ошибки "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', все должно работать.
Дайте мне знать, как это происходит!