Django:想按日期时间排序评论

时间:2011-07-13 21:21:29

标签: python django datetime

我在评论中有评论,我想用列表顶部的最新评论对它们进行排序。但它不起作用。我收到了这个错误。

Caught TypeError while rendering: 'Comment' object is not iterable

我不太确定是什么导致了这个问题。以下是我的观点和模型,可能有所帮助。

视图

def home(request):
    comments = Comment.objects.latest('datetime')
    return render_to_response('home.html', {'comments':comments}, context_instance=RequestContext(request))

模型

class Comment(models.Model):
    name = models.CharField(max_length = 40)
    datetime = models.DateTimeField(default=datetime.now)
    note = models.TextField()
    def __unicode__(self):
        return unicode(self.name)

3 个答案:

答案 0 :(得分:8)

latest方法只返回一个对象,而不是迭代器: https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest

使用order_by方法按日期排序(文档中的第一个示例): https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.order_by

答案 1 :(得分:6)

最干净的方法是在模型中添加一个类meta,并添加如下的排序参数:

class Comment(models.Model):
   name = models.CharField(max_length = 40)
   datetime = models.DateTimeField(default=datetime.now)
   note = models.TextField()

   class Meta:
       ordering = ('-datetime')

   def __unicode__(self):
       return unicode(self.name)

因此,您所做的每个查询都将按日期时间排序。

另一个建议不要选择“datetime”作为字段名称,datetime是标准库中包含的python模块。

答案 2 :(得分:2)

comments = Comment.objects.latest('datetime')中的评论不是评论的集合;这是单一评论

你想要做的是创建一个Comment对象数组并迭代它。