我需要有关django复发的帮助。我试图从模型重现字段中获取下一个和最后一个实例,如下所示:
course = Course.objects.all()
for c in course:
occurrence = c.recurrences.occurrences()
print(occurrence[0])
print(occurrence[-1])
这种方法有效,但速度极慢。这是来自recurrence包作者的comment,并建议在两个日期之间使用重复,但是因为我需要最后一个实例,在某些情况下是无限的(结束年份为9999)它不是帮助表现。
有没有更好的替代方法从重复字段中获取下一个和最后一个实例?
答案 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])