from django import forms from django.contrib.auth.forms import UserCreationForm from django.contrib.auth.models import User from django.core.exceptions import ValidationError from django.forms import FileInput from django.utils.translation import gettext_lazy as _ from .models import AdminRegistration, CoachRegistration, StudentRegistration class SignupForm(UserCreationForm): role = forms.ChoiceField( label=lambda: _("role").capitalize(), choices=lambda: [ ("participant", _("participant").capitalize()), ("coach", _("coach").capitalize()), ], ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["first_name"].required = True self.fields["last_name"].required = True self.fields["email"].required = True class Meta: model = User fields = ('first_name', 'last_name', 'email', 'password1', 'password2', 'role',) class UserForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["first_name"].required = True self.fields["last_name"].required = True self.fields["email"].required = True class Meta: model = User fields = ('first_name', 'last_name', 'email',) class StudentRegistrationForm(forms.ModelForm): class Meta: model = StudentRegistration fields = ('student_class', 'school', 'give_contact_to_animath',) class PhotoAuthorizationForm(forms.ModelForm): def clean_photo_authorization(self): file = self.files["photo_authorization"] if file.content_type not in ["application/pdf", "image/png", "image/jpeg"]: raise ValidationError(_("The uploaded file must be a PDF, PNG of JPEG file.")) return self.cleaned_data["photo_authorization"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["photo_authorization"].widget = FileInput() class Meta: model = StudentRegistration fields = ('photo_authorization',) class CoachRegistrationForm(forms.ModelForm): class Meta: model = CoachRegistration fields = ('professional_activity', 'give_contact_to_animath',) class AdminRegistrationForm(forms.ModelForm): class Meta: model = AdminRegistration fields = ('role', 'give_contact_to_animath',)