Coverage for website/events/admin/forms.py: 54.00%
44 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1from django import forms
2from django.core.exceptions import ValidationError
3from django.urls import reverse
4from django.utils.translation import gettext_lazy as _
6from events.models import Event, EventRegistration, RegistrationInformationField
7from events.widgets import FieldsWidget
10class RegistrationAdminForm(forms.ModelForm):
11 """Custom admin form to add a link to the registration information fields admin."""
13 fields = forms.URLField(widget=FieldsWidget, required=False)
15 def __init__(self, *args, **kwargs):
16 super().__init__(*args, **kwargs)
17 try:
18 if self.instance.event.has_fields:
19 self.fields["fields"].initial = reverse(
20 "admin:events_registration_fields", args=[self.instance.pk]
21 )
22 else:
23 self.fields["fields"].widget = self.fields["fields"].hidden_widget()
24 except Event.DoesNotExist:
25 self.fields["fields"].widget = self.fields["fields"].hidden_widget()
27 class Meta:
28 fields = "__all__"
29 model = EventRegistration
32class RegistrationInformationFieldForm(forms.ModelForm):
33 """Custom form for the registration information fields that adds an order field."""
35 order = forms.IntegerField(label=_("order"), initial=0)
37 def __init__(self, *args, **kwargs):
38 super().__init__(*args, **kwargs)
39 try:
40 event = self.instance.event
41 order = event.get_registrationinformationfield_order()
42 order_value = list(order).index(self.instance.pk)
43 self.fields["order"].initial = order_value
44 except Event.DoesNotExist:
45 pass
47 class Meta:
48 fields = "__all__"
49 model = RegistrationInformationField
50 widgets = {
51 "type": forms.Select,
52 }
55class EventAdminForm(forms.ModelForm):
56 def clean(self):
57 super().clean()
58 self.instance.clean_changes(self.changed_data)
60 def clean_organisers(self):
61 if (
62 self.request.member
63 and self.cleaned_data.get("organisers")
64 and not (
65 self.request.member.get_member_groups()
66 .filter(pk__in=self.cleaned_data.get("organisers").values_list("pk"))
67 .exists()
68 )
69 ) and not (
70 self.request.user.is_superuser
71 or self.request.user.has_perm("events.override_organiser")
72 ):
73 raise ValidationError(
74 _("You cannot remove your own access from this event.")
75 )
77 if self.cleaned_data.get("organisers").all() == 0:
78 raise ValidationError(_("An event must have at least one organiser."))
79 return self.cleaned_data.get("organisers")