2010-10-01 3 views
2

TEMPLATE:Django: Affichage du modèle de refactoring pour inclure le nombre?

<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' 

J'essaie de rendre le nombre de bugs (data) près de la <h2>. Quel serait un moyen efficace d'inclure le nombre de data près du h2? Dois-je définir une fonction séparée dans ma classe de modèle pour renvoyer le nombre total de bogues? Ou y a-t-il un moyen plus efficace?

Répondre

2
{% 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 %} 

Explication: la méthode grab_bugs de la classe retourne Group un querset de Bug cas. Pour obtenir le nombre de bogues, appelez la méthode count() sur le jeu de requête.

Cela vous coûtera deux requêtes (sans compter celles de la boucle). Un pour obtenir le compte et ensuite pour récupérer une liste de bogues.

+0

Est-ce que c'est syntaxiquement correct? J'aurais pu jurer que vous ne pouvez pas avoir de parenthèses d'invocation, '()'. '.count' fonctionne. –

+0

@meder: GRRRR. typo: P L'a changé :) –

+0

Une autre chose - puisque j'appelle la fonction 'grab_bugs' deux fois maintenant, est-ce moins efficace? –

Questions connexes