Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модели Django — получение количества комментариев 
V
    Опции темы
resurtm
Дата 23.6.2009, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 14.1.2009

Репутация: нет
Всего: 2



Привет всем!

Есть у меня модели:

Код

class Post(models.Model):
    title = models.CharField(max_length=40, primary_key=True)
    url_title = models.CharField(max_length=40)
    author = models.CharField(max_length=20)
    date = models.DateTimeField()
    text = models.TextField()
    short_text = models.TextField()
    tags = models.ManyToManyField(Tag)
    objects = PostManager()
 
    def __unicode__(self):
        return '%s, %s' % (self.title, self.author)
 
    class Meta:
        ordering = ['-date']

class Comment(models.Model):
    post = models.ForeignKey(Post)
    author = models.CharField(max_length=20)
    date = models.DateTimeField()
    text = models.TextField()
 
    def __unicode__(self):
        return '%s, %s, %s' % (self.post, self.author, self.date)
 
    class Meta:
        ordering = ['-date']


Вопрос такой: как можно добавить в результаты, которые выдаёт конструкция Post.objects.all() количество комментариев в каждом из постов? Т.е. чтобы можно было делать так, как нечто вроде Post.objects.all()[0].comments_count.

Можно конечно поступить просто и тупо: для каждого поста выполнять запрос SELECT COUNT(*) FROM Comment WHERE Comment.post = 'текущий пост' и передавать массив количеств комментариев в каждом посте в шаблон. Но это как-то тупо, и уверен, что есть способ более гибкий и более красивый.

Кто что думает по этому поводу?

Это сообщение отредактировал(а) resurtm - 23.6.2009, 19:57
PM WWW   Вверх
Daevaorn
Дата 23.6.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 3
Всего: 70



А какая у вас Джанга? Если post 1.0, то есть такой вариант:
Код

from django.db.models import Count

Post.objects.annotate(comments_count=Count('comment'))


http://docs.djangoproject.com/en/dev/ref/m...ate-args-kwargs

Это сообщение отредактировал(а) Daevaorn - 23.6.2009, 19:52
PM MAIL WWW   Вверх
resurtm
Дата 23.6.2009, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 14.1.2009

Репутация: нет
Всего: 2



Цитата(Daevaorn @ 23.6.2009,  19:52)
А какая у вас Джанга? Если post 1.0, то есть такой вариант:
Код

from django.db.models import Count

Post.objects.annotate(comments_count=Count('comment'))


http://docs.djangoproject.com/en/dev/ref/m...ate-args-kwargs

Не работает. Пишет, что у Manager отсутствует метод annotate. Тем не менее спасибо, до проблемы сам дотукал. Сделал как-то так:

Код

def articles(request):
    posts = Post.objects.all()
    return render_to_response('articles.html', {'posts': posts})

...

    {% for item in posts %}
            <div class="article-main">
                {{ item.short_text|safe }}
                <br />
                {{ item.comment_set.count }}
            </div>
    {% endfor %}


Всё работает так, как надо. =)

Добавлено через 4 минуты и 13 секунд
Спасибо за помощь, тем не менее! smile 
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Веб-разработка и фреймворки | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.