понедельник, 6 февраля 2012 г.

Re: оптимизация

class Category(models.Model):
"""Category model."""
title = models.CharField(_('title'), max_length=100)
slug = models.SlugField(_('slug'), unique=True)

class Meta:
verbose_name = _(u'Рубрики')
verbose_name_plural = _(u'Рубрики')
db_table = 'blog_categories'
ordering = ('title',)

def __unicode__(self):
return u'%s' % self.title

@permalink
def get_absolute_url(self):
return ('blog_category_detail', None, {'slug': self.slug})

class Post(models.Model):
"""Post model."""
STATUS_CHOICES = (
(1, _(u'Чорновик')),
(2, _(u'Чистовик')),
(3, _(u'На модерації')),
)
RATING_CHOICES = [(x,x) for x in range(1,21)]
title = models.CharField(_('title'), max_length=200)
slug = models.SlugField(_('slug'), unique=True, max_length=255)
title_image = models.ForeignKey(Photo, blank=True, null=True,
verbose_name=u'Заголовочний малюнок')
author = models.ForeignKey(User, blank=True, null=True,
verbose_name=u'Автор')
#body = models.TextField(_(u'Текст'), )
body = tinymce_model.HTMLField()
tease = models.TextField(_('tease'), blank=True,
help_text=_('Concise text suggested. Does not appear in RSS feed.'))
status = models.IntegerField(_(u'Стан'), choices=STATUS_CHOICES,
default=2)
allow_comments = models.BooleanField(_(u'Дозволити коментувати'),
default=True)
publish = models.DateTimeField(_(u'Дата публікації'),
default=datetime.datetime.now)
created = models.DateTimeField(_('created'), auto_now_add=True)
modified = models.DateTimeField(_('modified'), auto_now=True)
categories = models.ManyToManyField(Category,
verbose_name=u'Рубрика')
tags = TagField(verbose_name=u'Теги')
objects = PublicManager()
hit_counter = models.IntegerField(_(u'Хітів'),default=1)
rating = models.IntegerField(choices=RATING_CHOICES, default=20,
verbose_name=u'Кількість балів')
rating_count = models.IntegerField(_(u'Кількість голосів'),
default=1)
bold_title = models.BooleanField(_(u'Важлива новина'),
default=False, help_text=_(u'У стрічці новин буде виділена жирним
шрифтом'))
comments_count = models.IntegerField(_(u'Коментів'), default=1)


и используется django-tagging

Post.objects.all()[:1]

дает 3 запроса на один елемент

SELECT `blog_posts`.`id`, `blog_posts`.`title`, `blog_posts`.`slug`,
`blog_posts`.`title_image_id`, `blog_posts`.`author_id`,
`blog_posts`.`body`, `blog_posts`.`tease`, `blog_posts`.`status`,
`blog_posts`.`allow_comments`, `blog_posts`.`publish`,
`blog_posts`.`created`, `blog_posts`.`modified`, `blog_posts`.`tags`,
`blog_posts`.`hit_counter`, `blog_posts`.`rating`,
`blog_posts`.`rating_count`, `blog_posts`.`bold_title`,
`blog_posts`.`comments_count` FROM `blog_posts` ORDER BY
`blog_posts`.`publish` DESC LIMIT 1

SELECT `django_content_type`.`id`, `django_content_type`.`name`,
`django_content_type`.`app_label`, `django_content_type`.`model` FROM
`django_content_type` WHERE (`django_content_type`.`model` = post AND
`django_content_type`.`app_label` = blog )

SELECT *** FROM `tagging_tag` INNER JOIN `tagging_taggeditem` ON
(`tagging_tag`.`id` = `tagging_taggeditem`.`tag_id`) WHERE
(`tagging_taggeditem`.`content_type_id` = 13 AND
`tagging_taggeditem`.`object_id` = 46 ) ORDER BY `tagging_tag`.`name`
ASC

SELECT `tagging_tag`.`id`, `tagging_tag`.`name`, `tagging_tag`.`slug`
FROM `tagging_tag` INNER JOIN `tagging_taggeditem` ON
(`tagging_tag`.`id` = `tagging_taggeditem`.`tag_id`) WHERE
(`tagging_taggeditem`.`content_type_id` = 13 AND
`tagging_taggeditem`.`object_id` = 46 ) ORDER BY `tagging_tag`.`name`
ASC

а выбрал 20 элементов и 60 запросов получилось только в какой-то
менюшке

On 6 Лют, 15:41, Sergey Zhizhenko <zlobnyis...@gmail.com> wrote:
> Расшифруйте что вы имеете в виду под "родственниками"?
> Покажите как объявляете модель?
>
> On 06.02.2012, at 17:38, GSV wrote:
>
>
>
>
>
>
>
> > очень даже трогает
>
> > On 6 Лют, 13:04, Mikhail <glader...@gmail.com> wrote:
> >> 06.02.2012 17:00, GSV :
>
> >> . select_related(), ORM
> >> .

Комментариев нет:

Отправить комментарий