Sélectionnez Distinct ans et mois pour la page Django Archive
-
21-08-2019 - |
Question
Je veux faire une page archive_index pour mon site django. Cependant, les vues génériques basées sur la date ne sont pas vraiment d'aide. Je veux que le dictionnaire retourné par la vue d'avoir toutes les années et les mois pour lesquels au moins une instance du type d'objet existe. Donc, si mon blog a commencé en Septembre 2007, mais il n'y avait pas de messages en Avril 2008, je pourrais obtenir quelque chose comme ça
2009 - Jan, Feb, Mar 2008 - Jan, Feb, Mar, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec 2007 - Sep, Oct, Nov, Dec
La solution
Cela vous donnera une liste des dates d'affichage uniques:
Posts.objects.filter(draft=False).dates('post_date','month',order='DESC')
Bien sûr, vous ne pourriez pas besoin du projet de filtre, et le changement « POST_DATE » à votre nom de domaine, etc.
Autres conseils
J'ai trouvé la réponse à ma propre question.
Il est sur cette page dans la documentation.
Il y a une fonction appelée dates qui vous donnera les dates distinctes. Je peux donc faire
Entry.objects.dates ( « pub_date », « mois ») pour obtenir une liste d'objets datetime, un pour chaque année / mois.
Vous devriez être en mesure d'obtenir toutes les informations que vous décrivez des vues intégrées. Pouvez-vous être plus précis quant à ce que vous ne pouvez pas obtenir? Cela devrait avoir tout ce dont vous avez besoin:
django.views.generic.date_based.archive_month
Page de référence (recherche de la chaîne ci-dessus sur cette page)