django recurrence - 获取重复字段的最后一个实例

时间:2017-10-06 17:29:31

标签: django

我需要有关django复发的帮助。我试图从模型重现字段中获取下一个和最后一个实例,如下所示:

course = Course.objects.all() for c in course: occurrence = c.recurrences.occurrences() print(occurrence[0]) print(occurrence[-1])

这种方法有效,但速度极慢。这是来自recurrence包作者的comment,并建议在两个日期之间使用重复,但是因为我需要最后一个实例,在某些情况下是无限的(结束年份为9999)它不是帮助表现。

有没有更好的替代方法从重复字段中获取下一个和最后一个实例?

1 个答案:

答案 0 :(得分:1)

主要罪魁祸首是在没有定义结束日期的规则上使用occurrence = c.recurrences.occurrences()。它必须构建一个具有开始日期的Python对象,直到9999年,这非常非常大并且对性能不利。

通常,重复字段在表格中保存如下: RRULE:FREQ=MONTHLY;UNTIL=20180315T040000Z;BYMONTHDAY=15

假设重复字段名称为重复。然后,不要对所有记录执行occurrence = c.recurrences.occurrences(),而是先检查每个重复字段中的直到字段。如果它存在则意味着有一个结束日。如果有一个结束日occurrence = c.recurrences.occurrences()构建一个小的python对象(类似于在之间使用),否则最终的实例将是9999年,在这种情况下你不需要使用occurrence()调用。

我测试过这个并且很快。

course = Course.objects.all()
for c in course:
    if c.recurrences.rrules[0].until is None:
        print('No End date')
    else:
        occurrence = c.recurrences.occurrences()
        print(occurrence[0])
        print(occurrence[-1])