Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2013 01:15:31

Silent50
Зарегистрирован: 2013-04-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Множественный вызов метода в модели

Это вопрос скорее по реализации и оптимизации. Есть модель, в ней есть некий метод (свойство), который должен возвращать связный объект (или вообще любой другой объект).

    class Item(models.Model):
        meta_title = models.CharField(_('meta title'), max_length=250, blank=True)
        @property
        def tag(self):
            if hasattr(self, 'tag_object'):
                return self.tag_object
            try:
                self.tag_object = self.tags_set.get(first=True)
                return self.tag_object
            except ObjectDoesNotExist:
                return None

Но почему-то он не сохраняет этот объект и создает новый запрос к БД при каждом обращении.
    {{ item }}
    {{ item.tag.name }} <- new query
    {{ item.tag.desc }} <- new query

Можно сделать через {% with %}:
    {{ item }}
    {% with item.tag as tag %} <- new query
        {{ tag.name }} <- NOT query
        {{ tag.desc }} <- NOT query
    {% endwith %}

Но хочется избавить от лишних тегов в шаблоне и их собровождении и перемести это на плечи модели, вообще это реально сделать? Не интересуют варианты через вьюху … другие темплейт теги и т.д.

Офлайн

#2 Сен. 21, 2013 06:13:39

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Множественный вызов метода в модели

воткните pdb в ‘def tag’ и изучите, почему такое происходит.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version