【问题标题】:Loop Over Datetime range in django templates在 django 模板中循环日期时间范围
【发布时间】:2015-02-05 12:02:45
【问题描述】:

我有一个 django 模型之旅,我有一个像这样的 start_date 和 end_date

class Journey(models.Model):
    start_date = models.DateField(verbose_name=_('Start date'))
    end_end = models.DateField(verbose_name=_('End date'))

并拥有另一个模型,该模型具有该模型的外键 DAY_OF_WEEK = (('MO', '星期一'), ('TU','星期二'), ('我们','星期三'), ('TH', '星期四'), ('FR', '星期五'), ('SA','星期六'), ('SU', '星期天'),)

class Schedule(models.Model):

    day = models.CharField(max_length=2, choices=DAY_OF_WEEK)
    start_time = models.TimeField(null=True, blank=True, )
    end_time = models.TimeField(null=True, blank=True, )
    journey = models.ForeignKey(Journey)

我想要做的是迭代从 start_date 到 end_date 的所有日子。如果日期属于 Schedule 模型中的一天,那么我想在字典中更新该日期以及模型的其他字段,以便我可以在模板上对其进行迭代。为此我尝试了这个

import datetime
from time import strftime
def get_schedule_days(self):
    days=Schedule.objects.filter(journey=self).values('day')

    days_list=[]
    for day in days:
        days_list.append(day['day'])
    delta = datetime.timedelta(days=1)
    schedule_dict={}
    while d <= end_date:
        if d.strftime("%A").upper()[:2] in days_list:

            schedule_dict.update('date',d.strftime("%Y-%m-%d")) 
        print d.strftime("%Y-%m-%d")
        d += delta

di is 是正确的方法,还是有更好的方法来迭代一系列日期并找到计划安排的所有日期。

【问题讨论】:

    标签: python django django-models django-templates django-views


    【解决方案1】:

    重复日程是个很麻烦的问题,所以我建议你不要试图重新发明轮子来重复日程并使用 RRULE:http://labix.org/python-dateutil#head-470fa22b2db72000d7abe698a5783a46b0731b57

    要使用它,Journey 将不包括日期。 Schedules 模型将具有完整的开始和结束日期时间,然后是一个描述它们如何重复直到结束日期的 RRULE。

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      相关资源
      最近更新 更多