【问题标题】:how can I order the results of a query filter?如何订购查询过滤器的结果?
【发布时间】:2009-07-08 15:08:26
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 什么不起作用?语法看起来是正确的。它是否给出错误,它是否产生错误的数据,它是否得到任何东西?

标签: django django-queryset


【解决方案1】:

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

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

manage.py shell

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

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

然后,执行以下操作:

from django.db.import connection
connection.queries

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

【讨论】:

  • 嗨 Vinay,它返回对象,但它们不是按日期排序的。事实上,我不知道它们是如何排序的——看起来是随机的(尽管我确定不是。)
  • 那么您的Current 模型的date_added 属性到底是什么类型?
  • date_added = models.DateField(auto_now_add=True)
  • 将执行指令并从那里进行调查。感谢您的帮助。
【解决方案2】:

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

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

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

SELECT * FROM current_links ORDER BY date_added DESC

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2022-10-14
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    相关资源
    最近更新 更多