В django-recurrence метод between() с inc=True включает dtstart, даже если нет Recurrence then
Это вопрос по джазбэнду django-recurrence.
У меня есть модель с полем RecurrenceField:
# models.py
class Session(models.Model):
# other fields
dates = RecurrenceField(null=True)
В админке django я добавляю правило: еженедельно, по понедельникам.
Мне нужно получить все даты сессий текущего месяца (включая даты в прошлом). Однако, когда я вызываю between() с inc=True, и dtstart = первый день месяца (как описано в docs), то возвращается и dtstart (который является вторником для марта 2022 года):
# shell output:
In [7]: obj = Session.objects.all().first()
In [8]: for rule in obj.dates.rrules:
...: print(rule.to_text())
...:
hebdomadaire, chaque lundi # translates to: weekly, every Monday
In [9]: month_end
Out[9]: datetime.datetime(2022, 3, 31, 0, 0)
In [10]: month_start
Out[10]: datetime.datetime(2022, 3, 1, 0, 0)
In [11]: obj.dates.between(month_start,month_end,dtstart=month_start,inc=True,)
Out[11]:
[datetime.datetime(2022, 3, 1, 0, 0), # this is a Tuesday!
datetime.datetime(2022, 3, 7, 0, 0), # Monday
datetime.datetime(2022, 3, 14, 0, 0), # Monday
datetime.datetime(2022, 3, 21, 0, 0), # Monday
datetime.datetime(2022, 3, 28, 0, 0)] # Monday
In [12]: obj.dates.between(month_start,month_end,dtstart=month_start,inc=True,)[0].weekday()
Out[12]: 1
Как упоминалось в docs, dtstart включен по умолчанию. Чтобы исключить его, include_dtstart=False следует указать в качестве аргумента.