Django-cte 给出:“QuerySet”对象没有属性“with_cte”

问题描述 投票:0回答:1

我有以下格式的记录:

| id  | name |       created                  |
-----------------------------------------------
|1    | A    |2024-04-10T02:49:47.327583-07:00|
|2    | A    |2024-04-01T02:49:47.327583-07:00|
|3    | A    |2024-03-01T02:49:47.327583-07:00|
|4    | A    |2024-02-01T02:49:47.327583-07:00|
|5    | B    |2024-02-01T02:49:47.327583-07:00|

型号:

class Model1(model.Models):
   name = models.CharField(max_length=100)
   created = models.DateTimeField(auto_now_add=True)

我想在 django 中对现场的月份进行分组

created
并获取该月的最新记录。

预期输出:

| id  | name |       created                  |
-----------------------------------------------
|1    | A    |2024-04-10T02:49:47.327583-07:00|
|3    | A    |2024-03-01T02:49:47.327583-07:00|
|4    | A    |2024-02-01T02:49:47.327583-07:00|

我正在使用 django-cte 来执行上述操作

from django.db.models.functions import DenseRank, ExtractMonth
from django_cte import With
m = Model1.objects.get(id=1)
cte = With(
        Model1.objects.filter(name=m.name)
          rank=Window(
            expression=DenseRank(),
            partition_by=[ExtractMonth("created")],
            order_by=F("created").desc(),
        )
     )
qs = cte.queryset().with_cte(cte).filter(rank=1)

但是上面给出了错误:

qs = cte.queryset().with_cte(cte).filter(rank=1)
                    ^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'QuerySet' object has no attribute 'with_cte'

请帮忙!

python django common-table-expression django-orm django-annotate
1个回答
0
投票

你需要混合

CTEManager
,否则你会得到“香草”
QuerySet

from django_cte import CTEManager


class Model1(model.Models):
    name = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)
    objects = CTEManager()
© www.soinside.com 2019 - 2024. All rights reserved.