Survey & Custom Questions
Overview
Survey & Custom Questions let event hosts collect structured information from guests during RSVP or registration—dietary needs, t-shirt sizes, session preferences, accessibility requirements, and more. Questions support multiple field types, guest-list visibility, and (for the Attendees module) badge and segmentation options.
Purpose
Eliminate manual follow-up emails and spreadsheets by capturing guest data at the moment of RSVP/registration, with answers stored per guest and exportable for operations teams.
Who should use it
| Role |
Use case |
| Event host / organizer |
Create and manage questions |
| Operations |
View answers on guest list / registrations export |
| Marketing |
Segmentation via used_for_segmentation (Attendees module) |
| Guest / attendee |
Answer during RSVP or registration |
Benefits
- Single capture point — no post-registration surveys required for basic fields
- Supports RSVP events and full Attendee Registration workflows
- Host-visible response table on event detail page
- Guest list columns for check-in staff
- Re-editable answers when guests update RSVP
Navigation path
| Action |
Path |
| Manage on event detail (host) |
/events/<pk>/<event_tag>/ → Survey questions panel |
| Manage on edit event |
/events/<pk>/<event_tag>/edit/ → Survey questions section |
| Full question manager |
/attendees/<pk>/<event_tag>/questions/ |
| Edit single question |
/attendees/<pk>/<event_tag>/questions/<question_pk>/edit/ |
| Guest answers at RSVP |
Event detail → RSVP sidebar (non-host) |
| Guest list with answers |
/events/<pk>/<event_tag>/guests/ |
| Attendee registration questions |
/attendees/register/<pk>/<event_tag>/ (Attendees module) |
Prerequisites
- Event must exist (questions are attached to an event record)
- User must be event host or platform staff
- For guest-facing display: question must have Visible to guests (
is_active=True)
- Attendees module not required for RSVP survey questions
Warning: If Attendee Management is enabled with unified registration workflow, guests are routed to attendee registration—not the legacy RSVP form. Questions still use the same EventRegistrationQuestion model.
Step-by-step instructions
Beginner — Add a survey question (host)
- Sign in as event host.
- Open your event → View Event (
/events/<pk>/<tag>/).
- Scroll to Survey questions (left column on desktop).
- In Add question (right side of panel):
- Enter Question text (e.g., "Dietary restrictions")
- Select Question type (see Field descriptions)
- Toggle Required if mandatory
- For dropdown/multi-select: enter Answer options (one per line)
- Toggle Show in guest list to display on check-in table
- Click Add question.
- Confirm question appears in list without Hidden label.
[SCREENSHOT: Survey questions panel — add form]
- Click Edit next to the question.
- Update text, type, options, or uncheck Visible to guests to hide from new submissions.
- Save. Use Cancel to return without changes.
[SCREENSHOT: Edit question form with Visible to guests checkbox]
Advanced — Full manager with badge & segmentation
- Click Full manager in survey panel header.
- Use expanded form with Show on badge, Used for segmentation fields.
- Export registrations CSV from Attendees module when segmentation enabled.
Field descriptions
Question fields (organizer)
| Field |
Type |
Description |
| Question text |
Text (500 char) |
Label shown to guests |
| Question type |
Enum |
text, dropdown, multi_select, yes_no, file_upload, date |
| Required |
Boolean |
Guest cannot submit RSVP without answer |
| Answer options |
Textarea |
One option per line; required for dropdown/multi-select |
| Sort order |
Integer |
Display order (lower first) |
| Show in guest list |
Boolean |
Adds column on RSVP guest list |
| Show on badge |
Boolean |
Attendee module badge printing |
| Used for segmentation |
Boolean |
Filter/export for email segmentation |
Visible to guests (is_active) |
Boolean |
If false, question hidden from RSVP form |
Guest-facing fields
Dynamic fields named cq_<question_id> in the RSVP POST body.
Business rules
| Rule |
Behavior |
| Active questions only on RSVP form |
is_active=True questions shown to guests |
| Host sees all questions |
Including hidden/inactive in management panel |
| Answers stored per RSVP |
RSVPCustomAnswer linked to RSVP + question |
| Attendee registrations |
Answers in AttendeeCustomAnswer |
| Update RSVP |
Re-submitting updates existing answers |
| File upload |
Requires multipart/form-data; re-upload optional if file exists |
| Multi-select storage |
JSON array in answer_text |
| Yes/No storage |
Values yes / no |
Validation rules
| Condition |
Error |
| Dropdown/multi-select without options |
"Add at least one option" on save |
| Required question empty on RSVP |
"Please complete all required survey questions" |
| Invalid option selected |
ChoiceField validation error |
User permissions
| Action |
Host |
Staff |
Guest |
| Add/edit/delete questions |
✅ |
✅ |
❌ |
| View response table on event |
✅ |
✅ |
❌ |
| Answer questions |
❌ (host UI) |
✅ if RSVP as guest |
✅ |
| View own answers |
N/A |
✅ |
✅ ("Your survey answers") |
Workflow
sequenceDiagram
participant Host
participant Nigall
participant Guest
Host->>Nigall: Add survey questions
Nigall->>Nigall: Store EventRegistrationQuestion
Guest->>Nigall: Submit RSVP + cq_* fields
Nigall->>Nigall: Save RSVPCustomAnswer
Host->>Nigall: View Guest survey responses table
Guest->>Nigall: Return to event page
Nigall->>Guest: Show saved answers + pre-filled form
Examples
Example 1 — Wedding RSVP
| Question |
Type |
Required |
| Meal choice |
Dropdown: Chicken, Fish, Vegetarian |
Yes |
| Song request |
Text |
No |
Example 2 — Conference tee shirt
| Question |
Type |
Show in guest list |
| T-shirt size |
Multi-select: S, M, L, XL |
Yes |
Example 3 — Photo release
| Question |
Type |
Required |
| Photo consent |
Yes/No |
Yes |
Best practices
- Add questions before sharing the event link
- Use Show in guest list for day-of operational fields (meal, size, accessibility)
- Keep required questions minimal to reduce RSVP abandonment
- Use dropdown instead of free text when you need clean exports
- Test in incognito as guest after adding questions
Tips
- Use Sort order 10, 20, 30 to insert questions later without renumbering
- Full manager link preserves return URL via
?next= parameter
- Multi-select answers display as comma-separated on guest list
Common mistakes
| Mistake |
Result |
Fix |
| Testing while logged in as host |
No RSVP form visible |
Use guest account / incognito |
| Question shows Hidden |
Not on guest form |
Edit → check Visible to guests |
| Dropdown with no options |
Cannot save question |
Add answer options |
| Expecting answers on host RSVP sidebar |
Host sees management UI only |
Check Guest survey responses table |
FAQs
Are survey questions the same as attendee registration questions?
Same model (EventRegistrationQuestion). RSVP events store answers on RSVP; attendee module stores on AttendeeRegistration.
Can guests change answers after RSVP?
Yes. Logged-in guests re-submit RSVP; guest-link users use /guest-rsvp/<token>/.
Do file uploads work on RSVP?
Yes with enctype="multipart/form-data" on the form.
Troubleshooting
| Symptom |
Cause |
Resolution |
| Questions not on RSVP form |
is_active=False |
Edit question → Visible to guests |
| Answers not on event page |
Viewing as host |
See Guest survey responses table or guest list |
| Answers not saved |
Required field empty / validation failed |
Check flash message; complete all required |
| Empty guest list columns |
show_in_guest_list=False |
Enable on question |
| Old questions still hidden after fix |
Browser cache |
Hard refresh; verify DB is_active |
Screenshot placeholders
[SCREENSHOT: Survey questions panel with responses table]
[SCREENSHOT: Guest RSVP form with survey fieldset]
[SCREENSHOT: Your survey answers callout on event detail]
[SCREENSHOT: Guest list with survey columns]
[SCREENSHOT: Full manager — add question form]
Administrator notes
- Bulk-fix hidden questions:
EventRegistrationQuestion.objects.filter(event_id=X, is_active=False).update(is_active=True)
- Quick-add form (
SurveyQuestionAddForm) always sets is_active=True
- Monitor file upload storage path:
events/rsvp_survey/
Developer/API notes
| Item |
Detail |
| Model |
attendees.models.EventRegistrationQuestion |
| RSVP answers |
attendees.models.RSVPCustomAnswer |
| Form builder |
attendees.question_services.build_custom_answers_form() |
| Save |
save_rsvp_custom_answers(rsvp, form) |
| POST field prefix |
cq_<question_pk> |
| Host context |
survey_host_context(), guest_survey_responses |
| Mobile API |
Survey not yet exposed on mobile RSVP endpoint — web only |
See also: Guest Management & Check-In · Participant Guide