django_program.manage.forms

Model forms for the conference management dashboard.

Each form that wraps a pretalx-synced model accepts an is_synced flag. When the record has been synced from Pretalx (synced_at is not None), all fields are rendered as disabled so organizers cannot accidentally overwrite upstream data.

Classes

ActivityForm

Form for editing a conference activity.

AddOnForm

Form for creating and editing add-ons.

ConferenceForm

Form for editing conference details.

DisbursementForm

Form for marking a travel grant as disbursed.

ImportFromPretalxForm

Form for importing a new conference from a Pretalx event slug.

ManualPaymentForm

Form for organizers to record a manual payment against an order.

ReceiptFlagForm

Form for flagging a receipt with a reason.

ReviewerMessageForm

Form for reviewers to send a message on a travel grant.

RoomForm

Form for editing a room.

ScheduleSlotForm

Form for editing a schedule slot.

SectionForm

Form for editing a conference section.

SponsorForm

Form for editing a sponsor.

SponsorLevelForm

Form for editing a sponsor level.

TalkForm

Form for editing a talk.

TicketTypeForm

Form for creating and editing ticket types.

TravelGrantForm

Form for reviewing a travel grant application.

VoucherForm

Form for creating and editing vouchers.

class django_program.manage.forms.ImportFromPretalxForm[source]

Bases: Form

Form for importing a new conference from a Pretalx event slug.

Accepts a Pretalx event slug and optional conference slug override. The event slug is used to fetch event metadata from the Pretalx API and bootstrap a new Conference object with a full data sync.

base_fields = {'api_token': <django.forms.fields.CharField object>, 'conference_slug': <django.forms.fields.SlugField object>, 'pretalx_event_slug': <django.forms.fields.CharField object>}
declared_fields = {'api_token': <django.forms.fields.CharField object>, 'conference_slug': <django.forms.fields.SlugField object>, 'pretalx_event_slug': <django.forms.fields.CharField object>}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.ConferenceForm[source]

Bases: ModelForm

Form for editing conference details.

Stripe secret keys are excluded for security, along with auto-managed timestamp fields. The slug is excluded because it serves as the URL identifier and should not be casually changed.

class Meta[source]

Bases: object

model

alias of Conference

fields = ['name', 'start_date', 'end_date', 'timezone', 'venue', 'address', 'website_url', 'pretalx_event_slug', 'total_capacity', 'is_active']
widgets = {'end_date': <django.forms.widgets.DateInput object>, 'start_date': <django.forms.widgets.DateInput object>}
base_fields = {'address': <django.forms.fields.CharField object>, 'end_date': <django.forms.fields.DateField object>, 'is_active': <django.forms.fields.BooleanField object>, 'name': <django.forms.fields.CharField object>, 'pretalx_event_slug': <django.forms.fields.CharField object>, 'start_date': <django.forms.fields.DateField object>, 'timezone': <django.forms.fields.CharField object>, 'total_capacity': <django.forms.fields.IntegerField object>, 'venue': <django.forms.fields.CharField object>, 'website_url': <django.forms.fields.URLField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.SectionForm[source]

Bases: ModelForm

Form for editing a conference section.

Parameters:
class Meta[source]

Bases: object

model

alias of Section

fields = ['name', 'start_date', 'end_date', 'order']
widgets = {'end_date': <django.forms.widgets.DateInput object>, 'start_date': <django.forms.widgets.DateInput object>}
__init__(*args, conference=None, **kwargs)[source]

Build date select choices from the conference date range.

Parameters:
base_fields = {'end_date': <django.forms.fields.DateField object>, 'name': <django.forms.fields.CharField object>, 'order': <django.forms.fields.IntegerField object>, 'start_date': <django.forms.fields.DateField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.RoomForm[source]

Bases: ModelForm

Form for editing a room.

When the room has been synced from Pretalx, all fields are disabled to prevent overwriting upstream data.

Parameters:
class Meta[source]

Bases: object

model

alias of Room

fields = ['name', 'description', 'capacity', 'position']
__init__(*args, **kwargs)[source]

Initialise the form and disable fields when synced from Pretalx.

Parameters:
is_synced: bool
base_fields = {'capacity': <django.forms.fields.IntegerField object>, 'description': <django.forms.fields.CharField object>, 'name': <django.forms.fields.CharField object>, 'position': <django.forms.fields.IntegerField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.TalkForm[source]

Bases: ModelForm

Form for editing a talk.

Pretalx-synced fields are disabled when the record was last synced from the upstream API.

Parameters:
SYNCED_FIELDS: list[str] = ['pretalx_code', 'title', 'abstract', 'description', 'submission_type', 'track', 'duration', 'state', 'speakers', 'room', 'slot_start', 'slot_end']
class Meta[source]

Bases: object

model

alias of Talk

fields = ['pretalx_code', 'title', 'abstract', 'description', 'submission_type', 'track', 'duration', 'state', 'speakers', 'room', 'slot_start', 'slot_end']
__init__(*args, **kwargs)[source]

Initialise the form and disable synced fields when locked by Pretalx.

Parameters:
is_synced: bool
base_fields = {'abstract': <django.forms.fields.CharField object>, 'description': <django.forms.fields.CharField object>, 'duration': <django.forms.fields.IntegerField object>, 'pretalx_code': <django.forms.fields.CharField object>, 'room': <django.forms.models.ModelChoiceField object>, 'slot_end': <django.forms.fields.DateTimeField object>, 'slot_start': <django.forms.fields.DateTimeField object>, 'speakers': <django.forms.models.ModelMultipleChoiceField object>, 'state': <django.forms.fields.CharField object>, 'submission_type': <django.forms.fields.CharField object>, 'title': <django.forms.fields.CharField object>, 'track': <django.forms.fields.CharField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.ScheduleSlotForm[source]

Bases: ModelForm

Form for editing a schedule slot.

Pretalx-synced fields are disabled when the slot has been synced from the upstream Pretalx API.

Parameters:
SYNCED_FIELDS: list[str] = ['talk', 'title', 'room', 'start', 'end', 'slot_type']
class Meta[source]

Bases: object

model

alias of ScheduleSlot

fields = ['talk', 'title', 'room', 'start', 'end', 'slot_type']
__init__(*args, **kwargs)[source]

Initialise the form and disable synced fields when locked by Pretalx.

Parameters:
is_synced: bool
base_fields = {'end': <django.forms.fields.DateTimeField object>, 'room': <django.forms.models.ModelChoiceField object>, 'slot_type': <django.forms.fields.TypedChoiceField object>, 'start': <django.forms.fields.DateTimeField object>, 'talk': <django.forms.models.ModelChoiceField object>, 'title': <django.forms.fields.CharField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.SponsorLevelForm[source]

Bases: ModelForm

Form for editing a sponsor level.

class Meta[source]

Bases: object

model

alias of SponsorLevel

fields = ['name', 'cost', 'description', 'benefits_summary', 'comp_ticket_count', 'order']
base_fields = {'benefits_summary': <django.forms.fields.CharField object>, 'comp_ticket_count': <django.forms.fields.IntegerField object>, 'cost': <django.forms.fields.DecimalField object>, 'description': <django.forms.fields.CharField object>, 'name': <django.forms.fields.CharField object>, 'order': <django.forms.fields.IntegerField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.SponsorForm[source]

Bases: ModelForm

Form for editing a sponsor.

When the sponsor has an external_id (synced from the PSF API), fields that come from the upstream API are disabled to prevent overwriting synced data.

Parameters:
SYNCED_FIELDS: list[str] = ['name', 'level', 'website_url', 'logo_url', 'description']
class Meta[source]

Bases: object

model

alias of Sponsor

fields = ['name', 'level', 'website_url', 'logo', 'logo_url', 'description', 'contact_name', 'contact_email', 'is_active']
__init__(*args, **kwargs)[source]

Initialise the form and disable synced fields when locked by PSF sync.

Parameters:
is_synced: bool
base_fields = {'contact_email': <django.forms.fields.EmailField object>, 'contact_name': <django.forms.fields.CharField object>, 'description': <django.forms.fields.CharField object>, 'is_active': <django.forms.fields.BooleanField object>, 'level': <django.forms.models.ModelChoiceField object>, 'logo': <django.forms.fields.ImageField object>, 'logo_url': <django.forms.fields.URLField object>, 'name': <django.forms.fields.CharField object>, 'website_url': <django.forms.fields.URLField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.ActivityForm[source]

Bases: ModelForm

Form for editing a conference activity.

The slug field is excluded because it is auto-generated from the activity name. The room field provides an optional link to a Pretalx-synced room for venue assignment.

class Meta[source]

Bases: object

model

alias of Activity

fields = ['name', 'activity_type', 'description', 'room', 'location', 'pretalx_submission_type', 'start_time', 'end_time', 'max_participants', 'requires_ticket', 'external_url', 'is_active', 'organizers']
widgets = {'end_time': <django.forms.widgets.DateTimeInput object>, 'organizers': <class 'django.forms.widgets.CheckboxSelectMultiple'>, 'start_time': <django.forms.widgets.DateTimeInput object>}
base_fields = {'activity_type': <django.forms.fields.TypedChoiceField object>, 'description': <django.forms.fields.CharField object>, 'end_time': <django.forms.fields.DateTimeField object>, 'external_url': <django.forms.fields.URLField object>, 'is_active': <django.forms.fields.BooleanField object>, 'location': <django.forms.fields.CharField object>, 'max_participants': <django.forms.fields.IntegerField object>, 'name': <django.forms.fields.CharField object>, 'organizers': <django.forms.models.ModelMultipleChoiceField object>, 'pretalx_submission_type': <django.forms.fields.CharField object>, 'requires_ticket': <django.forms.fields.BooleanField object>, 'room': <django.forms.models.ModelChoiceField object>, 'start_time': <django.forms.fields.DateTimeField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.TravelGrantForm[source]

Bases: ModelForm

Form for reviewing a travel grant application.

class Meta[source]

Bases: object

model

alias of TravelGrant

fields = ['status', 'approved_amount', 'promo_code', 'reviewer_notes']
widgets = {'status': <django.forms.widgets.Select object>}
base_fields = {'approved_amount': <django.forms.fields.DecimalField object>, 'promo_code': <django.forms.fields.CharField object>, 'reviewer_notes': <django.forms.fields.CharField object>, 'status': <django.forms.fields.TypedChoiceField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.ReviewerMessageForm[source]

Bases: ModelForm

Form for reviewers to send a message on a travel grant.

class Meta[source]

Bases: object

model

alias of TravelGrantMessage

fields = ['message', 'visible']
widgets = {'message': <django.forms.widgets.Textarea object>}
labels = {'visible': 'Visible to applicant'}
base_fields = {'message': <django.forms.fields.CharField object>, 'visible': <django.forms.fields.BooleanField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.ReceiptFlagForm[source]

Bases: Form

Form for flagging a receipt with a reason.

base_fields = {'reason': <django.forms.fields.CharField object>}
declared_fields = {'reason': <django.forms.fields.CharField object>}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.DisbursementForm[source]

Bases: Form

Form for marking a travel grant as disbursed.

base_fields = {'disbursed_amount': <django.forms.fields.DecimalField object>}
declared_fields = {'disbursed_amount': <django.forms.fields.DecimalField object>}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.TicketTypeForm[source]

Bases: ModelForm

Form for creating and editing ticket types.

Provides datetime-local widgets for availability windows and auto-populates the slug from the ticket name on creation.

class Meta[source]

Bases: object

model

alias of TicketType

fields = ['name', 'slug', 'description', 'price', 'available_from', 'available_until', 'total_quantity', 'limit_per_user', 'requires_voucher', 'is_active', 'order']
widgets = {'available_from': <django.forms.widgets.DateTimeInput object>, 'available_until': <django.forms.widgets.DateTimeInput object>, 'description': <django.forms.widgets.Textarea object>}
base_fields = {'available_from': <django.forms.fields.DateTimeField object>, 'available_until': <django.forms.fields.DateTimeField object>, 'description': <django.forms.fields.CharField object>, 'is_active': <django.forms.fields.BooleanField object>, 'limit_per_user': <django.forms.fields.IntegerField object>, 'name': <django.forms.fields.CharField object>, 'order': <django.forms.fields.IntegerField object>, 'price': <django.forms.fields.DecimalField object>, 'requires_voucher': <django.forms.fields.BooleanField object>, 'slug': <django.forms.fields.SlugField object>, 'total_quantity': <django.forms.fields.IntegerField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.AddOnForm[source]

Bases: ModelForm

Form for creating and editing add-ons.

Provides datetime-local widgets for availability windows.

class Meta[source]

Bases: object

model

alias of AddOn

fields = ['name', 'slug', 'description', 'price', 'available_from', 'available_until', 'total_quantity', 'is_active', 'order']
widgets = {'available_from': <django.forms.widgets.DateTimeInput object>, 'available_until': <django.forms.widgets.DateTimeInput object>, 'description': <django.forms.widgets.Textarea object>}
base_fields = {'available_from': <django.forms.fields.DateTimeField object>, 'available_until': <django.forms.fields.DateTimeField object>, 'description': <django.forms.fields.CharField object>, 'is_active': <django.forms.fields.BooleanField object>, 'name': <django.forms.fields.CharField object>, 'order': <django.forms.fields.IntegerField object>, 'price': <django.forms.fields.DecimalField object>, 'slug': <django.forms.fields.SlugField object>, 'total_quantity': <django.forms.fields.IntegerField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.VoucherForm[source]

Bases: ModelForm

Form for creating and editing vouchers.

Uses checkbox widgets for the many-to-many ticket type and add-on fields so organizers can quickly select applicable items.

class Meta[source]

Bases: object

model

alias of Voucher

fields = ['code', 'voucher_type', 'discount_value', 'max_uses', 'valid_from', 'valid_until', 'unlocks_hidden_tickets', 'is_active', 'applicable_ticket_types', 'applicable_addons']
widgets = {'applicable_addons': <class 'django.forms.widgets.CheckboxSelectMultiple'>, 'applicable_ticket_types': <class 'django.forms.widgets.CheckboxSelectMultiple'>, 'valid_from': <django.forms.widgets.DateTimeInput object>, 'valid_until': <django.forms.widgets.DateTimeInput object>}
base_fields = {'applicable_addons': <django.forms.models.ModelMultipleChoiceField object>, 'applicable_ticket_types': <django.forms.models.ModelMultipleChoiceField object>, 'code': <django.forms.fields.CharField object>, 'discount_value': <django.forms.fields.DecimalField object>, 'is_active': <django.forms.fields.BooleanField object>, 'max_uses': <django.forms.fields.IntegerField object>, 'unlocks_hidden_tickets': <django.forms.fields.BooleanField object>, 'valid_from': <django.forms.fields.DateTimeField object>, 'valid_until': <django.forms.fields.DateTimeField object>, 'voucher_type': <django.forms.fields.TypedChoiceField object>}
declared_fields = {}
property media

Return all media required to render the widgets on this form.

class django_program.manage.forms.ManualPaymentForm[source]

Bases: Form

Form for organizers to record a manual payment against an order.

Supports comp, credit, and manual payment methods. The note field allows attaching context (e.g. check number, approval reference).

base_fields = {'amount': <django.forms.fields.DecimalField object>, 'method': <django.forms.fields.ChoiceField object>, 'note': <django.forms.fields.CharField object>}
declared_fields = {'amount': <django.forms.fields.DecimalField object>, 'method': <django.forms.fields.ChoiceField object>, 'note': <django.forms.fields.CharField object>}
property media

Return all media required to render the widgets on this form.