Consultar fecha y hora por la fecha de hoy en Django

estoy guardando datetime en la base de datos de un objeto. Me gustaría consultar contra la base de datos y seleccionar cualquier cosa de hoy. date, no datetime.

¿Cuál es la forma más sencilla de hacer esto? Esto no funciona:

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

preguntado el 27 de agosto de 11 a las 22:08

7 Respuestas

Recuerdo que había planes para agregar un __date búsqueda de campo para hacer esto más fácil, pero tal como está, la forma "estándar" de hacerlo es

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))

Respondido el 21 de diciembre de 14 a las 00:12

¿De dónde puedo importar la fecha? - Taufiq Muhammadi

@TaufiqMuhammadi date is datetime.date. from datetime import date, o simplemente usa datetime.date.today() - Ismail Badawi

__date se ha implementado en django1.9. documentación. - WhyNotHugo

También puedes hacer algo como esto:

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

Respondido el 28 de enero de 13 a las 08:01

De la respuesta aceptada, datetime.time.max devuelto, el objeto 'method_descriptor' no tiene ningún atributo 'max', pero tu respuesta funciona perfectamente, ¡gracias! - Gleb

La zona horaria debe ser la misma para el servidor de base de datos y el servidor web. Saurabh Chandra Patel

en 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)

en django> 1.9, ya que agregó la palabra clave de fecha

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

Respondido 13 Oct 17, 19:10

obj = TeachersPlanner.objects.filter(date__startswith=date.today())

Respondido el 13 de junio de 19 a las 11:06

Hay una nueva búsqueda de campo __date en Django 1.9 que puede usar:

Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))

API de conjunto de consultas

Respondido el 17 de Septiembre de 19 a las 10:09

Intenta usar las llaves date__gte y date__lte. Puede pasar dos objetos de fecha y hora que marcan los límites de lo que desea hacer coincidir.

Respondido 28 ago 11, 02:08

Para obtener entradas del Últimos horas 24 puedes usar:

from datetime import datetime, timedelta

Entry.objects.filter(pub_date__gte = datetime.now() - timedelta(days=1)) 

Respondido el 17 de enero de 18 a las 12:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.