我有一个像下面这样的模型
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')
它不工作并抛出一些编程错误异常
*** 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
字段排序
关于django - 编程错误 : when using order_by and distinct together in django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24865235/