当用户付款过期2天时,我正在尝试从付款模型中检索数据。以下代码是我已经尝试的。
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)
我认为它将不起作用,因为它会创建一个设置为0的时间值的日期对象,因此数据库中的时间不匹配。
使用上述代码,您可能会得到付款对象列表,该付款对象列表从过去到几天都过期,如果超过3/4/5天有溢价?
如果您想在类似范围之间的日期,从当前月/年开始到(当前日期-2/天昨天/逾期2天(,您可以通过使用更大的相等和小于等于:
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)
其他方式:简单地您可以使用__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])
注意:付款模型中应该有一个布尔标志,该标志将确定付款是付款还是到期,例如,我们在付款中添加isDue
标志,然后当您将付款设置为False
时,直到您获得付款付款将是True
。 那么您可以喜欢:
Payment.objects.filter(expected_payment_date__range=[startDate, endDate], isDue=True)
我使用的是 标志而不是 - 符号
expected_payment_date = datetime.date.today() + datetime.timedelta(-int(2))