【问题标题】:How to get an records with each month in a date range of two fields?如何在两个字段的日期范围内获取每个月的记录?
【发布时间】:2022-12-03 23:05:26
【问题描述】:

我有一个学习年模型,它有一个开始和结束日期。

class StudyYear(models.Model):
   date_begin = models.DateField(...)
   date_end = models.DateField(...)

我需要一个查询集,其中有每个研究年度的记录,其日期范围内有一个月 (start_date:end_date)

例子: 对于研究年 (09/01/2022:01/02/2023),qs 应包含记录:

...
(code=9_2022, name='September 2022'),
(code=10_2022, name='November 2022'),
(code=11_2022, name='October 2022'),
(code=12_2022, name='December 2022'),
(code=1_2023, name='January 2023'),
(code=2_2023, name='February 2023'),
...

老实说,我不知道如何解决这个问题,我真的希望得到你的帮助!

更新: 例如,我已经有了具有所需学习年限的 Queryset,为了简单起见,它包含一条记录:

Queryset(StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023'})

我需要获取如下记录:

Queryset([
    StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023', code='9_2022', name='September 2022'}
    StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023', code='10_2022', name='October 2022'}
    StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023', code='11_2022', name='November 2022'}
    StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023', code='12_2022', name='December 2022'}
    StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023', code='1_2023', name='January 2023'}
    StudyYear{id=1, date_begin='09/01/2022', date_end='02/01/2023', code='2_2023', name='February 2023'}
    ])

【问题讨论】:

  • 您是否还需要将同一个月的所有记录汇总在一起?
  • @DivyaPrakash,不,我只需要所有记录的 qs,最好只有唯一的记录
  • 您只想要这 5 个月的记录?
  • @DivyaPrakash,我想在一个 qs 中获取每个学习年的 begin_date 和 date_end 范围内的所有月份
  • 您能否检查答案,并让我知道该方法是否有效?

标签: django


【解决方案1】:

让我们试试这个:

from django.utils.timezone import now
from dateutil.relativedelta import relativedelta

# Get the First Day of This Month (September 1st 2022)
first_day = now().replace(day=1, month=9)

# Get the last Day of next year
last_day = first_day + relativedelta(months=13)

# Queryset
StudyYear.objects.filter(date_begin__gte=first_day, date_end__lte=last_day)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2019-03-24
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多