Code


Version 5 (modified by Russell Cloran <russell@…>, 8 years ago) (diff)

--

CookBook - Template tag Regroup

django version : 0.91

If you need to group a list of objects by a choice (eg, field has choices = CATEGORY_CHOICES), here is the trick.

The Model:

CATEGORY_CHOICES = (
        (1, 'Entrées'),
        (2, 'Poissons et crustacés'),
        (3, 'Viandes et volailles'),
        (4, 'Légumes et accompagnements'),
        (5, 'Desserts'),
        (6, 'Boissons'),
        (8, 'Autres'),
)       

class Recette(meta.Model):
        [...]
        categorie = meta.SmallIntegerField(choices = CATEGORY_CHOICES)

And here is the regroup tag in action. The thing is that you don't want to display the category number, but its corresponding name. (e.g not '1' but 'Entrées').

The Template:

{% regroup recettes by categorie as grouped %}
<ul>
{% for group in grouped %}
        <li>{{ group.list.0.get_categorie_display }} 
    <ul>
        {% for item in group.list %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
{% endfor %}
</ul>