Django date__range查询 - 如果日期范围在当前日期结束,则添加1天

时间:2017-02-04 01:07:29

标签: django date view filter

在我的网站上,我有一个页面,您可以通过javascript日历小部件输入开始日期和结束日期。它将查询数据库并返回结果。这是我的观点

class flagfilter(ListView, View):
form_class = FlagReportForm
template_name = 'free/flagreport.html'
paginate_by = 20

def get(self, request):
    form = self.form_class(None)
    return render(request, self.template_name, {'form': form})


def post(self, request):
    form = self.form_class(request.POST)

    if form.is_valid():
        start_date = request.POST.get('start_date', '')
        end_date = request.POST.get('end_date', '')
        user = request.user
        s = datetime.datetime.strptime(str(start_date), '%m/%d/%Y')
        e = datetime.datetime.strptime(str(end_date), '%m/%d/%Y')
        if e == s:
            e = e + datetime.timedelta(days=2)
        s_filtered = s.strftime('%Y-%m-%d')
        e_filtered = e.strftime('%Y-%m-%d')
        punch = Punch.objects.filter(date__range=[str(s_filtered),str(e_filtered)]).order_by('-date')
        punches = punch.filter(user=user)
        context = {'punches': punches}
        return render(request, 'free/flagreport2.html', context)

    return render(request, self.template_name, {'form': form})

我的问题是,如果您的日期范围在今天的日期结束,则它不会从当天返回对象。我添加了这一行:

        if e == s:
        e = e + datetime.timedelta(days=2)

我之所以这样做是因为如果您将开始日期和结束日期作为当前日期,那么它将无法返回今天的打孔对象。这解决了问题,但我仍有问题。如果你输入一个日期范围的开始日期,比如说,上周的某个时间。结束日期是当天。它仍然不会返回当前的日期打孔对象。因此,我想用检查结束日期是否为当前日期的内容替换此代码,如果是,请在结束日期添加一天。我已经尝试过一些东西但却无法工作。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

好的,所以我注意到无论选择哪个日期作为结束日期,都会发生同样的事情。结束日期结果不会返回。所以添加

e = e + datetime.timedelta(days=)

应该解决我的问题!

答案 1 :(得分:0)

您可以尝试使用

Punch.objects.filter(date__gte=s, date__lte=e).order_by('-date')

而不是date__range,我认为应该省去你必须使用strftime和任何timedelta的东西

编辑:我认为甚至不需要Q