我在评论中有评论,我想用列表顶部的最新评论对它们进行排序。但它不起作用。我收到了这个错误。
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)
答案 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对象数组并迭代它。