Source code for events.forms

from django import forms
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from .models import RegistrationInformationField, Event, EventRegistration
from .widgets import FieldsWidget


[docs]class RegistrationAdminForm(forms.ModelForm): """ Custom admin form to add a link to the registration information fields admin """ fields = forms.URLField(widget=FieldsWidget, required=False) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) try: if self.instance.event.has_fields(): self.fields["fields"].initial = reverse( "admin:events_registration_fields", args=[self.instance.pk] ) else: self.fields["fields"].widget = self.fields["fields"].hidden_widget() except Event.DoesNotExist: self.fields["fields"].widget = self.fields["fields"].hidden_widget()
[docs] class Meta: fields = "__all__" model = EventRegistration
[docs]class RegistrationInformationFieldForm(forms.ModelForm): """ Custom form for the registration information fields that adds an order field """ order = forms.IntegerField(label=_("order"), initial=0) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) try: event = self.instance.event order = event.get_registrationinformationfield_order() order_value = list(order).index(self.instance.pk) self.fields["order"].initial = order_value except Event.DoesNotExist: pass
[docs] class Meta: fields = "__all__" model = RegistrationInformationField widgets = { "type": forms.Select, }
[docs]class FieldsForm(forms.Form): """Form that outputs the correct widgets for the information fields""" def __init__(self, *args, **kwargs): self.information_fields = kwargs.pop("fields") super().__init__(*args, **kwargs) for key, field in self.information_fields.items(): field_type = field["type"] if field_type == RegistrationInformationField.BOOLEAN_FIELD: self.fields[key] = forms.BooleanField(required=False) elif field_type == RegistrationInformationField.INTEGER_FIELD: self.fields[key] = forms.IntegerField(required=field["required"]) elif field_type == RegistrationInformationField.TEXT_FIELD: self.fields[key] = forms.CharField(required=field["required"]) self.fields[key].label = field["label"] self.fields[key].help_text = field["description"] self.fields[key].initial = field["value"]
[docs] def field_values(self): for key, field in self.information_fields.items(): yield (key, self.cleaned_data[key])
[docs]class EventMessageForm(forms.Form): """Form that outputs a widget to get info to send a push notification""" title_en = forms.CharField(label=_("Title (EN)"), max_length=150) title_nl = forms.CharField(label=_("Title (NL)"), max_length=150) body_en = forms.CharField(label=_("Body (EN)"), widget=forms.Textarea) body_nl = forms.CharField(label=_("Body (NL)"), widget=forms.Textarea) url = forms.CharField( max_length=256, required=False, help_text=_("The notification opens to the event by default."), )