222 votes

Comment puis-je filtrer une date d'un DateTimeField dans Django?

J'essaie de filtrer un DateTimeField comparant avec une date. Je veux dire:

 MyObject.objects.filter(datetime_attr=datetime.date(2009,8,22))
 

Je reçois une liste de requêtes vide comme réponse car (je pense) je ne considère pas le temps, mais je veux "n'importe quand".

Y a-t-il un moyen facile de faire cela dans Django?

J'ai le temps dans le datetime réglé, ce n'est pas 00:00 .

133voto

Piotr Czapla Points 8626

Ces recherches sont implémentées dans django.views.generic.date_based comme suit:

 {'date_time_field__range': (datetime.datetime.combine(date, datetime.time.min),
                            datetime.datetime.combine(date, datetime.time.max))} 
 

Comme il est assez verbeux, il est prévu d’améliorer la syntaxe en utilisant __date operator. Cochez " # 9596 La comparaison d'un DateTimeField avec une date est trop difficile " pour plus de détails.

120voto

zalew Points 4213
<pre><code></code><p>Edit après commentaires</p><pre><code></code></pre><p>Doest inopérante parce qu’elle crée un objet datetime avec les valeurs d’heure définies à 0, donc ne correspond pas à la fois dans la base de données.</p></pre>

117voto

Moreno Points 333

Voici les résultats que j’ai obtenu avec la fonction timeit d’ipython :

contient semble être plus rapide.

51voto

kettlehell Points 141
<pre><code></code><p>ce qui précède, c’est ce que j’ai utilisé. Non seulement ça marche, il a également certain soutien logique inhérente.</p></pre>

27voto

mhost Points 1320

Cela donne les mêmes résultats que l’utilisation de year, month et __day et semble fonctionner pour moi :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X