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')
Jeff Taggarty
fuente

Respuestas:

230

Utilice el __rangeoperador:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))
Daniel Roseman
fuente
¿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
Manjuanth VM
fuente
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))
suhailvs
fuente