Django: Рефакторинг представления шаблона для включения количества? - PullRequest
2 голосов
/ 01 октября 2010

ШАБЛОН:

 <ul id="bugs-list">
  {% for group in groups %}

      <h2>{{ group.name }}</h2> <span></span>
      {% for data in group.grab_bugs %}
          <li><a href="{{data.get_absolute_url}}">{{data.name }}</a></li>
      {% endfor %}

  {% endfor %}

  </ul>

models.py:

class BrowserGroups( models.Model ):
    name = models.CharField( max_length=100 )
    slug = models.SlugField(unique=True)
    browsers = models.ManyToManyField( 'Browser' )

    def grab_bugs(self):
        bugs = Bug.objects.filter(browser__browsergroups=self,really_bug=True).distinct()
        return bugs

    def __unicode__(self):
        return self.name

    class Meta:
        verbose_name_plural = 'Browser Groups'

Я пытаюсь отобразить количество ошибок (data) рядом с <h2>. Какой эффективный способ включить подсчет data возле h2? Должен ли я определить отдельную функцию в моем классе модели, чтобы она возвращала общее количество ошибок? Или есть более эффективный способ?

1 Ответ

2 голосов
/ 01 октября 2010
{% with group.grab_bugs as distinct_bugs %}
    <h2>{{ group.name }}</h2> (Count: {{ distinct_bugs.count }})
    {% for data in distinct_bugs %}
        <li><a href="{{data.get_absolute_url}}">{{data.name }}</a></li>
    {% endfor %}
{% endwith %}

Объяснение: метод grab_bugs класса Group возвращает набор запросов из Bug экземпляров.Чтобы получить количество ошибок, вызовите метод count() в наборе запросов.

Это обойдется вам в два запроса (не считая тех, которые находятся внутри цикла).Один, чтобы получить количество, а затем, чтобы получить список ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...