django - 编程错误 : when using order_by and distinct together in django

标签 django postgresql django-models sql-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')

它不工作并抛出一些编程错误异常

*** 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/

相关文章:

python - 无法访问 Django-Oscar 中的产品价格?

javascript - 表分页 [Bootstrap - Django]

postgresql - 使用 Terraform 在 AWS RDS PostgreSQL 上启用 PostGIS

django - 如何设置Django对象实例权限?

django - Django 中多对多字段结构所需的建议

django - 您如何在非主分支上干净地维护 django 迁移?

ios - 将地址转换为经度和纬度

sql - 对具有相同值的两列进行排序时出现奇怪的排序错误(这是错误吗?)

sql - Postgres - 嵌套连接表的条件不起作用

Django:从日期时间字段查询时间