ProgrammingError:在django中使用order_by和distinct时

时间:2014-07-21 12:35:10

标签: 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')

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

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

那么如何才能从上表中获得最近创建的唯一记录?

1 个答案:

答案 0 :(得分:7)

PostgreSQL要求你这样做:

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

...按-created排序会为您提供最新的每个重复项,但您的整体查询结果将按scale字段排序