Я для решения подобной задачи взял
py-dateutil, он умеет разворавичать запись набора дат (повторяющихся событий) из формата iCalendar (RFC2445), например:
DTSTART:19970902T090000
RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5
В базе у меня в отдельной таблице Событие хранится эта исходная строка и в отдельный таблице развернутый список дат. Можно, конечно, каждый раз разворачивать строку и не хранить даты в базе, но боюсь, что такой вариант будет медленней.