【问题标题】:wrong order by date in django templatedjango模板中按日期排序错误
【发布时间】:2011-07-19 09:17:40
【问题描述】:

我得到一个这样的对象列表

return Post.objects.filter(categoria=categoria)

然后我将其发送到模板。我像这样在模板中显示它们

{% for p in posts reversed %}

这样我就可以将新帖子放在首位。它在 99% 的时间里都是这样工作的,但是它会随机失败,因为它会在一些旧帖子下面显示最后一个帖子。日期是正确的,最后一个帖子显示它具有最近的日期,但它出现在其他旧帖子的下方。

失败时没有做任何特别的事情,我认为这可能是一些不起眼的 django 错误。

关于什么可能导致这种情况的任何想法?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    如果您想避免每次查询模型时都必须使用 .order_by(...),请使用 ordering Meta 选项:

    class Post(Model):
        # your fields here
        the_date = DateTimeField(...)
    
        class Meta:
            # sort by "the date" in descending order unless
            # overridden in the query with order_by()
            ordering = ['-the_date']
    

    【讨论】:

      【解决方案2】:

      在获取对象时包含 order_by 似乎可以解决问题。

      【讨论】:

      • 我对订购解决了您的订购问题并不感到惊讶? :)
      • 对我来说,没有它就失败了。
      • 如果没有明确的顺序,无论是在查询中还是在模型定义中,Post 对象将按照数据库返回它们的顺序出现,这通常是未定义的,除非您的数据库显式返回查询按特定顺序排列的行。因此,如果顺序很重要,您应该始终使用明确的 orderingorder_by(...)
      • 我应该注意到reversed 迭代只是按照与数据库返回结果相反的顺序迭代结果。它不知道您想要什么顺序(除非您明确指定它,请参阅我之前的评论),也不知道您的模型的任何内容。
      • 默认按ID排序
      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2012-05-16
      • 1970-01-01
      • 2020-12-15
      • 2015-01-01
      相关资源
      最近更新 更多