Ok, nous allons essayer de faire soulever des objets lourds dans la structure de données, au lieu de modèles.
Créons un utilitaire.
import itertools
def group_by_values(posts, key):
groups = {}
for k, g in itertools.groupby(posts, key):
if groups.get(k) is not None:
groups[k].extend(list(g))
else:
groups[k] = list(g)
return groups
Utilisons l'utilitaire ici.
entries = Entry.objects.all().order_by('date')
yearly_entries = group_by_values(entries, key=lambda x: x.date.year)
monthly_yearly_entries = {}
for k, v in yearly_entries.items():
monthly_yearly_entries[k] = group_by_values(v, key=lambda x: x.date.month)
return monthly_yearly_entries
Le résultat est agréable avec le dictionnaire années et des mois comme des clés comme celui-ci:
monthly_yearly_entries = {2013: {9: [Entry1, Entry2], 10: [Entry4, Entry5]}}
que vous pouvez afficher bien dans les modèles