Estoy tratando de recuperar datos de mi modelo de pagos, cuando el pago de un usuario está atrasado por 2 días. El siguiente código es lo que ya he probado.
expected_payment_date = datetime.date.today() + datetime.timedelta(+int(2)) users = Payment.objects.filter(expected_payment_date=expected_payment_date)expected_payment_date = datetime.date.today() + datetime.timedelta(-int(2)) users = Payment.objects.filter(expected_payment_date=expected_payment_date)Creo que no funcionará porque crea un objeto de fecha y hora con valores de hora establecidos en 0, por lo que la hora en la base de datos no coincide.
Con el código anterior, es posible que obtenga solo la lista de objetos de pago que está atrasada desde los últimos días, ¿qué pasa si hay atrasos de más de 3/4/5 días?
Si desea una fecha entre el rango como, desde el inicio del mes/año actual hasta (fecha actual -2 / día antes de ayer / vencido por 2 días), puede hacer lo siguiente usando mayor que igual y menor que igual:
import datetime from datetime import date from datetime import timedelta startDate = date(2017, 1, 1) # start date endDate = date.today() - timedelta(days=2) # end date --> day before yesterday. payments = Payment.objects.filter(expected_payment_date__gte=startDate, expected_payment_date__lte=endDate) Otra forma: simplemente puede usar __range ,
startDate = date(2017, 1, 1) # start date endDate = date.today() - timedelta(days=2) # Day before Yesterday. Payment.objects.filter(expected_payment_date__range=[startDate, endDate]) NOTA: Debe haber un indicador booleano en el modelo de pago, que indicará si el pago se pagó o venció, digamos que agregamos el indicador isDue en Pago, luego, cuando reciba el pago, configúrelo en False , hasta que reciba el pago. será True . entonces puedes hacer como:
Payment.objects.filter(expected_payment_date__range=[startDate, endDate], isDue=True)Estaba usando un signo + en lugar de un signo -
expected_payment_date = datetime.date.today() + datetime.timedelta(-int(2))