Seleccione entre dos fechas con Django


116

Estoy buscando hacer una consulta que seleccione entre fechas con Django.

Sé cómo hacer esto con SQL sin formato con bastante facilidad, pero ¿cómo podría lograrse esto usando el ORM de Django?

Aquí es donde quiero agregar las fechas entre 30 días en mi consulta:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

Respuestas:


230

Utilice el __rangeoperador:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

¿Es "created_at" un campo arbitrario en un modelo o es el registro real de la base de datos de cuándo se creó el registro?
Bigbob556677

@ Philip556677 Es un campo arbitrario en un modelo. Puede establecer el parámetro auto_now_add de DateField en True para tenerlo fácilmente.
Benbb96


1

dos métodos

.filter(created_at__range=[from_date, to_date])

otro método

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte significa mayor que igual
  • lte significa menos que igual

Q Objects es innecesario en el segundo método, puede escribir:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

Si está utilizando un DateTimeField, el filtrado con fechas no incluirá elementos del último día.

Necesita lanzar el valor como fecha:

...filter(created_at__date__range=(start_date, end_date))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.