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 %}
Но хочется избавить от лишних тегов в шаблоне и их собровождении и перемести это на плечи модели, вообще это реально сделать? Не интересуют варианты через вьюху … другие темплейт теги и т.д.