2010-09-06 6 views
2

J'ai un modèle avec un champ datetime et je veux montrer les entrées les plus vues pour la journée aujourd'hui.django ordre par date dans date/date d'extraction de datetime

Je pensais que je pourrais essayer quelque chose comme dt_published__date pour extraire la date du champ datetime, mais de toute évidence, cela n'a pas fonctionné.

popular = Entry.objects.filter(type='A', is_public=True).order_by('-dt_published__date', '-views', '-dt_written', 'headline')[0:5] 

Comment est-ce que je peux faire ceci?

Répondre

7

AFAIK la syntaxe __date n'est pas encore supportée par Django. Il y a un ticket ouvert pour cela.

Si votre base de données a une fonction pour extraire une partie de date, vous pouvez le faire:

popular = Entry.objects.filter(**conditions).extra(select = 
    {'custom_dt': 'to_date(dt_published)'}).order_by('-custom_dt') 
+1

Date (dt_published) le tour est joué pour mysql, merci – demux

+0

Mais ce ne sera pas ralentir ma requête? – demux

+1

Pour PostgresSQL: populaire = Entry.objects.filter (** conditions) .extra (select = {'custom_dt': "date_trunc ('jour', dt_published)"}, order_by = ['- custom_dt', '-views' , '-dt_written', 'headline']) [0: 5]. http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC –

Questions connexes