【发布时间】:2015-07-17 00:35:54
【问题描述】:
我有以下:
class Product(models.Model):
name = models.CharField(max_length=255)
class Action(models.Model):
product = models.ForeignKey(Product)
created_at = models.DateTimeField(auto_now_add=True)
我想检索由 created_at DESC 排序的最近 10 个具有不同产品的操作。
以下是接近结果但仍然错过排序:
Action.objects.all().order_by('product_id').distinct('product_id')[:10]
【问题讨论】:
-
您是否尝试过颠倒您的
order_by()和distinct()调用顺序? -
Django 的文档指出:“指定字段名时,必须在 QuerySet 中提供 order_by(),并且 order_by() 中的字段必须以 distinct() 中的字段开头,同命令。”。 docs.djangoproject.com/en/1.8/ref/models/querysets/…
-
您的订单通过
product_id,而不是created_at。为什么? -
因为要让 distinct('product_id') 工作,您必须在 order_by 子句中指定它。
-
但是,您可以为 order_by 设置多个参数。根据您刚刚提供的链接的示例,您似乎可以这样做:
.order_by('product_id', 'created_at').distinct('product_id')
标签: django postgresql django-queryset