Newer
Older
from django.core.exceptions import ValidationError
from shared.forms import FormRenderMixin
class InscriptionForm(FormRenderMixin, forms.ModelForm):
class Meta:
model = models.ParticipantModel
"meal_friday_evening", "meal_saturday_morning", "meal_saturday_midday",
"meal_saturday_evening", "meal_sunday_morning", "meal_sunday_midday",
)
field_groups = [["school"], ["sleeps"], #["mug"],
[
"meal_friday_evening", "meal_saturday_morning", "meal_saturday_midday",
"meal_saturday_evening", "meal_sunday_morning", "meal_sunday_midday",
]
]
def save(self, *args, commit=True, **kwargs):
participant = super().save(*args, commit=False, **kwargs)
participant.is_registered = True
if commit:
participant.save()
return participant
class ActivityForm(FormRenderMixin, forms.ModelForm):
class Meta:
model = models.ActivityChoicesModel
fields = ("slot",)
labels = {"slot":""}
def __init__(self, *args, **kwargs):
super(ActivityForm, self).__init__(*args, **kwargs)
slots = models.SlotModel.objects.filter(subscribing_open=True)
self.fields['slot'].queryset = slots
class BaseActivityFormSet(forms.BaseFormSet):
"""Form set that fails if duplicate activities"""
def clean(self):
"""Checks for duplicate activities"""
if any(self.errors):
# Don't bother validating the formset unless each form is valid on its own
return
activities = []
for form in self.forms:
if self.can_delete and self._should_delete_form(form):
continue
activity = form.cleaned_data.get('slot')
if activity is None:
continue
if activity in activities:
raise ValidationError("Vous ne pouvez pas sélectionner une même activtté plusieurs fois")
activities.append(activity)
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
class ActivitySubmissionForm(FormRenderMixin, forms.ModelForm):
class Meta:
model = models.ActivityModel
fields = (
"title", "act_type", "game_type", "description",
"host_info",
"must_subscribe", "communicate_participants",
"max_participants", "min_participants",
"duration", "desired_slot_nb",
"available_friday_evening",
"available_friday_night",
"available_saturday_morning",
"available_saturday_afternoon",
"available_saturday_evening",
"available_saturday_night",
"available_sunday_morning",
"available_sunday_afternoon",
"constraints",
"status", "needs",
"comments",
)
def save(self, *args, commit=True, **kwargs):
participant = super().save(*args, commit=False, **kwargs)
participant.is_registered = True
if commit:
participant.save()
return participant