Форум сайта python.su
Есть список сообщений, каждое из которых имеет стои теги. Для тегов подключил
django-taggit + django-taggit-autosuggest
Проблема в том, что когда вывожу список сообщений и к ним тэги, число запросов в базу огромно.
Т.е:
1. запрос вытягивается список сообщений
2. показывается сообщение и идет запрос за тегами к сообщению
3. на каждый тэг идет снова запрос в базу, что бы получить его имя
Вот третий пункт и есть проблемная вещь. По идее вместо третьего пункта надо один раз вытянуть теги в массив, и потом уже брать имена из этого массива. Как это реализовать средствами django ?
Или есть какие то более удобные решения ?
models
class Post(models.Model):
title = models.CharField(max_length=255)
short_text = models.TextField()
long_text = models.TextField()
pub_date = models.DateTimeField('date published')
tags = TaggableManager(through=PostTaggedItem)
def home(request):
posts = Post.objects.all()
return render(request, 'home.html', {'posts': posts})
{% for post in posts %}
<div>
<h3>{{ post.title }}</h3>
{{ post.short_text }}
<div class="post_tags">
Теги:
{% for item in post.tagged_items.all %}
{% with item.tag as tag %}
<b>{{ tag.name }} </b>
{% endwith %}
{% endfor %}
</div>
</div>
{% endfor %}
SELECT ••• FROM `blog_post`
SELECT ••• FROM `taggit_taggeditem` WHERE (`taggit_taggeditem`.`object_id` = 1 AND `taggit_taggeditem`.`content_type_id` = 8 )
SELECT ••• FROM `taggit_tag` WHERE `taggit_tag`.`id` = 7
SELECT ••• FROM `taggit_tag` WHERE `taggit_tag`.`id` = 9
SELECT ••• FROM `taggit_tag` WHERE `taggit_tag`.`id` = 8
SELECT ••• FROM `taggit_taggeditem` WHERE (`taggit_taggeditem`.`object_id` = 2 AND `taggit_taggeditem`.`content_type_id` = 8 )
SELECT ••• FROM `taggit_tag` WHERE `taggit_tag`.`id` = 7
SELECT ••• FROM `taggit_tag` WHERE `taggit_tag`.`id` = 4
Отредактировано VadimK (Сен. 6, 2013 11:55:39)
Офлайн