2011-03-21 40 views
3

我得到的对象的列表这样错误的顺序按日期在Django模板

return Post.objects.filter(categoria=categoria) 

而且我发送到模板。我将它们显示在这样的模板中

{% for p in posts reversed %} 

这样我就可以获得最新的帖子。它可以像99%的时间那样工作,但它会随机失败,因为它会显示某个旧帖子下面的最后一个帖子。日期是正确的,最后的帖子显示它有最近的日期,但它出现在其他一些较旧的帖子下面。

没有什么特别的,当它失败时,我想这可能是一些晦涩的Django错误。

有关可能导致此问题的任何想法?

回答

13

如果你想避免使用.order_by(...)每次查询模型时,使用orderingMeta选项:

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'] 
-1

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

+1

我不是很惊讶,订货固定您的订购问题? :) – 2011-03-21 02:16:52

+0

没有它,它对我来说依然没有任何意义。 – madprops 2011-03-21 03:57:09

+0

如果没有明确的排序,无论是在查询中还是在模型定义中,“Post”对象都会以数据库返回它们的顺序出现,除非数据库按特定顺序显式返回查询行,否则这些对象通常是未定义的。因此,如果订单很重要,则应始终使用明确的“排序”或“order_by(...)”。 – dcrosta 2011-03-21 12:33:17