Recurring Events¶
Overview¶
Nigall supports recurring event series via recurrence_series_id, recurrence_rule JSON, and cloned event instances—created at event save time with configurable frequency and occurrence count.
Purpose¶
Reduce duplicate data entry for weekly meetups, monthly workshops, and multi-date programs while keeping independent capacity and RSVPs per instance.
Who should use it¶
- Community organizers (weekly/biweekly meetups)
- Training coordinators (monthly sessions)
- Venue programs with repeating slots
Benefits¶
- One form creates N linked events
- Series edit scopes (single vs all future)
recurrence_summary()display on event cards
Navigation path¶
| Action | Path |
|---|---|
| Create with recurrence | /events/create/ → Set up recurring event |
| Edit series instance | /events/<pk>/<tag>/edit/ |
| Series members | Derived via event.series_members() |
Prerequisites¶
- Event create/edit permission as host
- Clear start/end datetime for anchor event
- Understand per-instance URLs (each clone has own
pkandevent_tag)
Step-by-step — Create recurring series¶
- Create Event → fill details.
- Check Set up recurring event (
setup_recurrence). - Select Frequency:
daily,weekly,biweekly,monthly. - Enter Occurrences count (total events in series).
- Save →
materialize_recurring_events()clones instances. - Flash message: "Created N recurring events successfully!"
[SCREENSHOT: Recurrence options on create form]
Step-by-step — Edit recurring event¶
- Edit any instance in series.
- Choose Edit scope:
- This event only
- This and future events
- Entire series (when rescheduling) - Frequency/occurrence changes may call
reschedule_recurring_series().
Field descriptions¶
| Field | Description |
|---|---|
recurrence_series_id |
UUID linking series members |
recurrence_parent |
FK to parent event (if child) |
recurrence_index |
0 = anchor instance |
recurrence_rule |
JSON: frequency, occurrences |
setup_recurrence |
Form-only flag on create |
recurrence_frequency |
daily / weekly / biweekly / monthly |
recurrence_occurrences |
Integer count |
recurrence_edit_scope |
Scope on edit POST |
Recurrence summary labels¶
| Frequency | Label |
|---|---|
| daily | Daily |
| weekly | Weekly |
| biweekly | Every 2 weeks |
| monthly | Monthly |
Business rules¶
| Rule | Detail |
|---|---|
| Anchor | recurrence_index == 0 is series anchor |
| Independent RSVPs | Each instance has own guest list |
| Tags | Each clone gets unique event_tag |
is_recurring |
True when recurrence_series_id set |
| Materialize on create | Clones created in same transaction batch |
Validation rules¶
- Occurrences must be positive integer
- Frequency required when
setup_recurrencechecked - End date after start date on anchor
User permissions¶
| Action | Host | Staff |
|---|---|---|
| Create series | ✅ | ✅ |
| Edit scope | ✅ | ✅ |
| RSVP per instance | ✅ | ✅ |
Workflow¶
Examples¶
Weekly yoga: 12 occurrences, biweekly, private RSVP links per date.
Monthly webinar: Public registration series; Discover shows each dated instance.
Best practices¶
- Set capacity per instance based on room size
- Share correct instance URL in each calendar invite
- Use series edit scope carefully to avoid unintended date shifts
Tips¶
series_members()queryset for admin scripts- Recurrence summary shown on event cards in My Events
Common mistakes¶
| Mistake | Result | Fix |
|---|---|---|
| One link for whole series | Wrong date RSVPs | Share instance-specific URLs |
| Edit all when meaning one | Mass date change | Use single scope |
| Expecting shared guest list | Per-event data | Export per instance |
FAQs¶
Do clones share modules?
Module toggles copied at creation; configure anchor before materialize when possible.
Can I add occurrences later?
Edit series or create new series extension (manual process).
Troubleshooting¶
| Symptom | Cause | Fix |
|---|---|---|
| Only one event created | Recurrence not checked | Re-edit with setup_recurrence |
| Wrong dates | Timezone / scope | Verify anchor start_date |
Related features¶
Screenshot placeholders¶
[SCREENSHOT: Recurrence checkbox and frequency dropdown][SCREENSHOT: My Events showing series summary badge][SCREENSHOT: Edit scope modal]
Administrator notes¶
- Service:
events/recurrence_services.py - Session flash:
event_recurring_totalin session
Developer/API notes¶
| Function | Purpose |
|---|---|
materialize_recurring_events() |
Create clones |
reschedule_recurring_series() |
Bulk date shift |
recurrence_rule_values() |
Parse rule for forms |
Mobile API treats each instance as separate event record.
See also: Event Field Reference