编程错误:在django中同时使用order_by和distinct时[英] ProgrammingError: when using order_by and distinct together in django

本文是小编为大家收集整理的关于编程错误:在django中同时使用order_by和distinct时的处理方法,想解了编程错误:在django中同时使用order_by和distinct时的问题怎么解决?编程错误:在django中同时使用order_by和distinct时问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有一个像下面的模型

class ProductScore(models.Model):
    client = models.ForeignKey(User)
    created = models.DateTimeField(default=datetime.datetime.now)
    score = models.IntegerField()
    scale = models.ForeignKey(Product) 

到目前为止,我正在使用以下查询来过滤上述模型的重复项

scores = ProductScore.objects.filter(client=request.user).distinct('scale')

通过上述查询,它返回了唯一的结果,但旧的结果(创建的日期很旧),例如,如果上表ProductScore具有10个重复记录,其中创建了其中5个,昨天和5个重复记录它们是今天创建的,上面的查询将返回5个唯一记录,这些记录是昨天创建的.

,但我想要最近创建的记录(即今天)和唯一的记录,所以我尝试了以下

scores = ProductScore.objects.filter(client=request.user).order_by('created').distinct('scale')

无法正常工作并扔一些programming error exception

*** ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("product_productscore"."scale...
                            ^

那么,如何获得最新创建的唯一记录,以上表?

推荐答案

PostgreSQL要求您这样做:

ProductScore.objects.filter(client=request.user).order_by('scale', '-created').distinct('scale')

...通过-created订购将为您提供每个重复的最新,尽管您的整体查询结果将由scale field

订购

本文地址:https://www.itbaoku.cn/post/1764083.html