0

我的视图中有这行代码,它允许我按日期显示一组项目(我还颠倒了顺序,所以最近的显示在前):

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

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

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

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

4

2 回答 2

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。它应该有助于解决这个问题。

于 2009-07-08T15:21:30.643 回答
0

我在您的查询中注意到一件事:如果您尝试颠倒顺序以便首先出现最近的日期,您将使用以下语法:

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

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

SELECT * FROM current_links ORDER BY date_added DESC

如果在 filter() 之后将 order_by() 链接起来,则 order_by() 应该可以工作,前提是 filter() 有效。

于 2009-07-08T22:49:20.553 回答