Найти - Пользователи
Полная версия: Множественный вызов метода в модели
Начало » Django » Множественный вызов метода в модели
1
Silent50
Это вопрос скорее по реализации и оптимизации. Есть модель, в ней есть некий метод (свойство), который должен возвращать связный объект (или вообще любой другой объект).
    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 %}

Но хочется избавить от лишних тегов в шаблоне и их собровождении и перемести это на плечи модели, вообще это реально сделать? Не интересуют варианты через вьюху … другие темплейт теги и т.д.
lorien
воткните pdb в ‘def tag’ и изучите, почему такое происходит.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB