【问题标题】:Django queryset time intervalDjango 查询集时间间隔
【发布时间】:2021-08-10 09:06:35
【问题描述】:

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

目前我找到了一种方法,可以只从一天中选择对象,而不是从间隔中选择对象:

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}")

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:
    data = data.filter(start_at__gt=start_at, end_at__gt=end_at)
    

    上面一行表示需要满足的对象:

    1. start_ats 比 datetime.now() - timedelta(hours=12)
    2. end_ats 比 datetime.now() + timedelta(hours=12)

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

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

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

    1. start_ats 比 datetime.now() - timedelta(hours=12)
    2. end_ats 比 datetime.now() + timedelta(hours=12)

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2021-04-06
      • 2023-02-21
      • 2017-03-21
      • 1970-01-01
      • 2016-05-27
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多