首页 > 解决方案 > Django 查询集时间间隔

问题描述

我需要按时间间隔在我的数据库中进行对象选择

目前我找到了一种仅从一天中选择对象而不是从间隔中选择对象的方法:

data.filter(end_at__day=datetime.datetime.now().day)

我在 django __gte 文档上看到了这个,这意味着从一个日期到今天,但我没能让它工作

在此处输入图像描述

我试过这个:

    if request.method == 'POST':
        form = DashboardSettingsForm(data=request.POST)
        if form.is_valid():
            dis_planned = form.cleaned_data.get('display_planned')
            dis_currently = form.cleaned_data.get('display_currently')
            dis_ended = form.cleaned_data.get('display_ended')
            end_at = start_at = datetime.now()

            if dis_ended:
                end_at = datetime.now() - timedelta(hours=12)
            if dis_planned:
                start_at = datetime.now() + timedelta(hours=12)
            data = data.filter(start_at__gt=start_at, end_at__gt=end_at)
            print(f"interval: start{start_at} end{end_at}")

标签: pythondjangodjango-queryset

解决方案


data = data.filter(start_at__gt=start_at, end_at__gt=end_at)

上述行表示对象需要满足:

  1. start_atsdatetime.now() - timedelta(hours=12)
  2. end_atsdatetime.now() + timedelta(hours=12)

因此,您需要使用 reverse ( lt) for end_at,使其成为覆盖范围的过滤器:

data = data.filter(start_at__gt=start_at, end_at__lt=end_at)

这实质上意味着对象需要满足以下标准:

  1. start_atsdatetime.now() - timedelta(hours=12)
  2. end_atsdatetime.now() + timedelta(hours=12)

推荐阅读