循环遍历django模板中的日期时间范围

时间:2014-12-07 20:56:01

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

我有一个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'))

并且有另一个对这个模型有foreignKey的模型     DAY_OF_WEEK =(('MO','Monday'),                ('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的正确方法,还是有更好的方法来迭代一系列日期,并找到计划安排的所有日子。

1 个答案:

答案 0 :(得分:0)

重复计划是一个混乱的问题,因此我建议您不要尝试重新发明轮子以重复计划并使用RRULE:http://labix.org/python-dateutil#head-470fa22b2db72000d7abe698a5783a46b0731b57

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