2009-03-24 6 views
9

Je souhaite créer une page archive_index pour mon site django. Cependant, les vues génériques basées sur la date ne sont vraiment pas utiles. Je souhaite que le dictionnaire renvoyé par la vue contienne toutes les années et tous les mois pour lesquels existe au moins une instance du type d'objet. 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 çaSélectionnez Années et mois distincts pour l'archive Django Page

2009 - Jan, Feb, Mar 
2008 - Jan, Feb, Mar, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec 
2007 - Sep, Oct, Nov, Dec

Répondre

33

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 peut-être pas besoin du filtre de brouillon, et change 'post_date' à votre nom de domaine, etc

+3

Pour toute personne ayant un 'DateTimeField', c'est simplement' .datetimes (...) '. – Pureferret

1

Vous devriez être en mesure d'obtenir toutes les informations que vous décrivez de la vue intégrée. 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 

Reference page (recherche de la chaîne ci-dessus sur cette page)

+0

Non, cela donne les objets réels pour le mois. Je ne veux pas les objets. Je veux juste les mois et les années distincts eux-mêmes. – Apreche

10

J'ai trouvé la réponse à ma propre question.

It's on this page dans la documentation.

Il existe une fonction appelée dates qui vous donnera des dates distinctes. Donc je peux faire

Entry.objects.dates ('pub_date', 'month') pour obtenir une liste d'objets datetime, un pour chaque année/mois.

+0

C'est drôle, vous pouvez répondre à votre propre question. J'ajouterais cependant vos résultats à votre post original. –

Questions connexes