2010-02-15 7 views
3

Existe-t-il une méthode que je ne trouve pas pour obtenir les heures distinctes dans un champ DateTimeField? Je veux essentiellement la même chose que .dates() fournit mais pendant des heures.Django obtient des heures uniques dans un champ datetime

Je devrais préciser que je parle d'une méthode QuerySet. La méthode dates() dont je parle est la suivante: http://docs.djangoproject.com/en/1.1/ref/models/querysets/#dates-field-kind-order-asc

Sinon, existe-t-il une solution connue recommandée?

Merci. Ajout d'un éclaircissement: J'ai un modèle appelé Event avec un champ DateTimeField appelé start_date. Nous devons savoir quelles heures d'une journée particulière ont un événement. Disons que nous réduire à un mois donné:

objects = Event.objects.filter(start_date__year=2010, start_date__month=2) 

maintenant les fonctions de dates pourraient me donner aa liste de tous les jours qui ont un événement:

distinct_days = objects.dates('start_date', 'day') 

Ce que je voudrais est le réduire à un jour particulier, puis obtenir une liste distincte des heures dans la journée qui ont un événement.

objects = Event.objects.filter(start_date__year=2010, start_date__month=2, start_date__day=3) 
distinct_hours = objects.times('start_date', 'hour') # This command doesn't exist and am wondering how to do this 

Merci.

+0

Peut-être pouvez-vous décrire/montrer la requête réelle que vous voulez faire. Peut-être que cela peut être fait sans 'dates()'. –

Répondre

1

Malheureusement, il n'y a pas de bon moyen de le faire pour l'instant, le meilleur moyen est d'utiliser du SQL brut en conjonction avec la méthode extra(), puis d'appeler distinct().

+0

J'ai essayé d'ajouter ce qui suit et je ne peux pas en obtenir une liste distincte: .extra (select = {'hours': 'DATE_FORMAT (start_date, "%% H")'} – mhost

+0

Vous auriez besoin de faire .extra (stuff) .values_list ("heures", flat = True) .distinct() –

+0

Voici l'ensemble de queues de fin (les objets sont déjà filtrés jusqu'à un jour spécifique): objets. extra (select = {'heures': 'DATE_FORMAT (date_début, "%% H")'}). values_list ("heures", flat = True) .distinct(). order_by ('heures') – mhost

2

Voulez-vous obtenir les heures d'un objet datetime? De quel .dates() voulez-vous dire?

hour = instance.yourDateTimeField.hour 
+0

+1, mais voulez-vous dire datetime.datetime.hour (sans les 's')? J'appuie la question sur 'dates()'. –

+0

@Jarret Hardie: Oh, vous avez raison sur le 's', merci :) –

+0

Je parle de ceci: http://docs.djangoproject.com/fr/1.1/ref/models/querysets/#dates- field-kind-order-asc – mhost

0

solution simple: heures peuvent être stockées dans un champ distinct, avec unique=True.

1

J'ai créé ce code afin de le faire manuellement.

hours = [] 
for h in objects.values('start_date'): 
    hours.append(h['start_date'].hour) 
tempdict = {} 
for x in hours: 
    tempdict[x] = x 
hours = tempdict.values() 
hours.sort() 
Questions connexes