【问题标题】:Django date__range query- add 1 day if date range ends on current dateDjango date__range 查询 - 如果日期范围在当前日期结束,则添加 1 天
【发布时间】:2017-06-21 11:35:53
【问题描述】:

在我的网站上,我有一个页面,您可以在其中通过 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)

我这样做是因为如果您将开始和结束日期作为当前日期,它将不会返回今天的打孔对象。这解决了问题,但我仍然有问题。如果您输入一个日期范围,其开始日期为上周某个时间。结束日期是当天。它仍然不会返回当前的打孔对象。所以我想用检查结束日期是否为当前日期的代码替换此代码,如果是,则在结束日期上增加一天。我已经尝试了几件事,但无法正常工作。任何帮助表示赞赏!

【问题讨论】:

    标签: django date view filter


    【解决方案1】:

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

    e = e + datetime.timedelta(days=)
    

    应该解决我的问题!

    【讨论】:

      【解决方案2】:

      你可以试试

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

      而不是 date__range,我认为这应该可以让您不必使用 strftime 和任何 timedelta 的东西

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

      【讨论】:

      • strmstime 的东西是把我的小部件的格式转换成 Django 喜欢的格式。但我从未见过你刚刚分享的代码。我将不得不做一些关于它的阅读!
      • 这个想法是使用 gte 和 lte(大于或等于/小于等于)所以查询去哪里 data >= 2017-01-01 and date = 2017-01-01 和日期
      • 感谢您的信息!
      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 2014-12-17
      • 2020-08-16
      • 2019-12-31
      • 2012-04-16
      • 2017-04-22
      • 1970-01-01
      • 2023-04-02
      相关资源
      最近更新 更多