【发布时间】:2012-06-29 02:47:20
【问题描述】:
我有一个与Article 模型相关的Read 模型。我想做的是创建一个查询集,其中文章是唯一的并由date_added 排序。由于我使用的是 postgres,我更喜欢使用 .distinct() 方法并指定 article 字段。像这样:
articles = Read.objects.order_by('article', 'date_added').distinct('article')
但是,这并没有达到预期的效果,并按照创建的顺序对查询集进行排序。我知道 Django 文档中关于 .distinct() 和 .order_by() 的注释,但我认为它不适用于这里,因为它提到的副作用是会有重复,我没有看到。
# To actually sort by date added I end up doing this
articles = sorted(articles, key=lambda x: x.date_added, reverse=True)
这会在我真正需要它之前执行整个查询,如果有很多记录,它可能会变得非常慢。我已经使用select_related() 进行了优化。
是否有更好、更有效的方法来创建具有相关模型和 order_by 日期唯一性的查询?
更新 理想情况下,输出将是 Read 实例的查询集,其中它们的相关文章在查询集中是唯一的,并且仅使用 Django orm(即在 python 中排序)。
【问题讨论】:
-
你运行的是什么版本的 Django?将参数传递给
distinct仅在 1.4+ 中可用 -
1.4 并使用 postgres,它可以工作
标签: django postgresql