如何订购查询过滤器的结果?

时间:2009-07-08 15:08:26

标签: django django-queryset

我在我的视图中有这行代码,允许我按日期显示一组项目(我也颠倒了顺序,因此最新的显示首先显示):

currentlinks = Current.objects.order_by('date_added').reverse()[:5]

工作正常,但是,当我将order_by代码与过滤器...

连接起来时
currentsources = Current.objects.filter(source__exact='bbc').order_by('date_added')

为什么这不起作用?或许语法不好,或者我只是不理解这应该如何工作?

2 个答案:

答案 0 :(得分:1)

如果没有Current个对象的source为“bbc”,那么您当然会得到一个空的结果集。这是你的意思不起作用?如果没有,请发布您获得的结果。

更新:还有一件事要尝试:启动

manage.py shell

然后在shell中,评估给出问题的查询集。

currentsources = Current.objects.filter(source__exact='bbc').order_by('date_added')

然后,执行以下操作:

from django.db.import connection
connection.queries

这将显示为查询集执行的原始SQL。它应该有助于解决这个问题。

答案 1 :(得分:0)

我在您的查询中注意到的一件事:如果您尝试撤消订单以便首先显示更新的日期,则可以使用以下语法:

currentlinks = Current.objects.order_by(' - date_added')

场地前面的减号反转顺序。它大致等同于SQL中的以下语法:

SELECT * FROM current_links ORDER BY date_added DESC

如果你在filter()之后链接它,order_by()应该有效,只要filter()有效。