2009-03-24 13 views
9

Desidero creare una pagina archive_index per il mio sito django. Tuttavia, le viste generiche basate sulla data non sono di aiuto. Voglio che il dizionario restituito dalla vista abbia tutti gli anni e i mesi per i quali esiste almeno un'istanza del tipo di oggetto. Quindi, se il mio blog è iniziato nel settembre 2007, ma non c'erano messaggi in Aprile 2008, ho potuto ottenere qualcosa di simileSelezionare anni e mesi distinti per la pagina di archivio Django

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

risposta

33

Questo vi darà un elenco di date distacco uniche:

Posts.objects.filter(draft=False).dates('post_date','month',order='DESC') 

Naturalmente potrebbe non essere necessario il progetto del filtro, e il cambiamento 'POST_DATE' al nome del campo, ecc

+3

Per chiunque abbia un 'DateTimeField' è semplicemente' .datetimes (...) '. – Pureferret

1

Si dovrebbe essere in grado di ottenere tutte le informazioni che descrivono il built-in vista. Puoi essere più specifico su ciò che non puoi ottenere? Questo dovrebbe avere tutto il necessario:

django.views.generic.date_based.archive_month 

Reference page (cercare la stringa sopra di quella pagina)

+0

No, questo fornisce gli oggetti reali per il mese. Non voglio gli oggetti. Voglio solo i mesi e gli anni distinti. – Apreche

10

ho trovato la risposta alla mia domanda.

It's on this page nella documentazione.

C'è una funzione chiamata date che ti darà date distinte. Così posso fare

Entry.objects.dates ('pub_date', 'mese') per ottenere una lista di oggetti datetime, uno per ogni anno/mese.

+0

È divertente poter rispondere alla tua stessa domanda. Vorrei aggiungere anche le tue scoperte al tuo post originale. –

Problemi correlati