簡體   English   中英

在 Django QuerySet 中使用 TruncMonth 時收到“NotImplementedError”

[英]Receiving "NotImplementedError" when using TruncMonth in Django QuerySet

在編程和 Django 方面,我是一個完全的初學者。

我在用什么:

Django 2.2.8

pymongo 3.12.1

瓊戈 1.3.6

MongoDB 3.6.23

我正在嘗試創建一個查詢集,我在其中從數據庫中獲取日期並將其按月分組。 我從數據庫中提取的日期格式為“2022-11-26T00:00:00.000+00:00”。 因此,我正在嘗試使用 TruncMonth 注釋僅當月的新字段,以便我可以按月分組。 我也嘗試過使用“提取”,但這似乎也不起作用。

我試圖避免使用使用“額外”的方法,因為它已被棄用。

我一直在 python shell 中這樣做,直到得到我想要的結果。 這是我的代碼:

模型.py:

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

python shell:

>>>from charts.models import Charts
>>>from datetime import datetime
>>>from 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`

根據我所做的研究,它與我認為的日期時間與日期的字段有關。 我發現這篇文章似乎在正確的軌道上,但無法執行。

另一個有用的信息是當我運行 Charts.objects.values('finding_date') 它返回: [{'finding_date': datetime.datetime(2022, 11, 26, 0, 0, tzinfo=<UTC>)}, ...等所以我知道該字段是 datetime.datetime。

我知道你需要一個答案,所以我會很快提供一個,雖然我是在手機上輸入的,所以不會很詳細。

我認為您想使用 Extract 而不是 TruncMonth。 看這里

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

在該頁面上,您會找到一個示例,他們從日期時間字段中提取年份

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

我很確定,如果您使用 Extract 而不是 TruncMonth 並使用“月”而不是“年”,一切都應該有效。

讓我知道事情的后續!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM