我对这个问题进行了研究,并给出了每种类型的最新答案,例如this topic
不同之处在于,我希望获得每种类型的n
最新项目,用于所有类型。现在我得到了所有的条目,然后在python中找到第n个最近的条目,这非常慢
例如
class CakeType(models.Model):
name = models.CharField(max_length=40)
class CakeEntry(models.Model):
cake_type = models.ForeignKey(CakeType, on_delete=models.CASCADE)
created = models.DateTimeField()
对于所有不同的/唯一的CakeType
,我们如何得到最近的5个CakeEntry
我将数据库从MySQL迁移到PostgreSQL(做了很多工作),所以我可以使用Postgres的DISTINCT ON
阅读文档后,我尝试了以下操作:
from django.db.models import F, Window
from django.db.models.functions import Rank
cake_entries = (
CakeEntry.objects.order_by(
'-created'
).annotate(
rank=Window(
expression=Rank(),
partition_by=[F('cake_type_id')],
order_by=F('created').desc(),
),
).filter(rank__lt=5)
)
但是在没有等级/分区的情况下获得django.db.utils.NotSupportedError: Window is disallowed in the filter clause.
,我不知道该怎么做
我看不到使用Window的方法,因为目标相互冲突:
为了避开过滤器问题,必须创建一个子查询。问题是,用作表达式(注释)的子查询应该返回1行,以便将特定的列组绑定到特定的外部引用,但窗口需要所有相关行的范围。如图所示:
我能想到的最接近的方法是:
相关问题 更多 >
编程相关推荐