44 votes

Requête datetime par date d'aujourd'hui dans Django

J'économise datetime dans la base de données pour un objet. J'aimerais interroger la base de données et sélectionner n'importe quoi à partir d'aujourd'hui date , pas datetime.

Quelle est la façon la plus simple de le faire ? Cela ne fonctionne pas :

 invoice_for_today = Invoice.objects.get(user=user, date=date.today())

61voto

Ismail Badawi Points 10898

Je me souviens qu'il était prévu d'ajouter une __date pour rendre cela plus facile, mais en l'état, la manière "standard" de le faire est

 today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
today_max = datetime.datetime.combine(datetime.date.today(), datetime.time.max)
Invoice.objects.get(user=user, date__range=(today_min, today_max))

32voto

Peppelorum Points 515

Vous pouvez également faire quelque chose comme ceci :

 today = date.today()
invoice_for_today = Invoice.objects.filter(date__year=today.year, date__month=today.month, date__day=today.day)

22voto

Marco Silva Points 351

à Django<1.9

 from django.utils.timezone import datetime #important if using timezones
today = datetime.today()
foo_for_today = Foo.objects.filter(datefield__year=today.year, datefield__month=today.month, datefield__day=today.day)

dans django> 1.9, car ils ont ajouté le mot-clé date

 foo_for_today = Foo.objects.filter(datefield__date=datetime.date.today())

13voto

Rajan Mandanka Points 1307
obj = TeachersPlanner.objects.filter(date__startswith=date.today())

6voto

jtbandes Points 39804

Essayez d'utiliser les touches date__gte et date__lte . Vous pouvez transmettre deux objets datetime marquant les limites de ce que vous voulez faire correspondre.

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