Джанго: хочу отсортировать комментарии по дате - PullRequest
7 голосов
/ 14 июля 2011

У меня есть комментарии и я хочу отсортировать их по последнему комментарию вверху списка.Однако это не работает.Я получаю эту ошибку.

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 ]

8 голосов
/ 14 июля 2011

Метод 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

6 голосов
/ 14 июля 2011

Самый простой способ - добавить метаданные класса в вашу модель и добавить параметр упорядочения, например:

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 голосов
/ 14 июля 2011

Комментарий в comments = Comment.objects.latest('datetime') НЕ является коллекцией комментариев;это один комментарий .

То, что вы хотите сделать, - это создать массив объектов Comment и выполнить итерацию по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...