mirror of
				https://gitlab.com/animath/si/plateforme-corres2math.git
				synced 2025-11-04 13:12:20 +01:00 
			
		
		
		
	Enable registration form
This commit is contained in:
		@@ -0,0 +1 @@
 | 
			
		||||
default_app_config = 'registration.apps.RegistrationConfig'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,11 @@
 | 
			
		||||
from django.apps import AppConfig
 | 
			
		||||
from django.db.models.signals import pre_save, post_save
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RegistrationConfig(AppConfig):
 | 
			
		||||
    name = 'registration'
 | 
			
		||||
 | 
			
		||||
    def ready(self):
 | 
			
		||||
        from registration.signals import set_username, create_admin_registration
 | 
			
		||||
        pre_save.connect(set_username, "auth.User")
 | 
			
		||||
        post_save.connect(create_admin_registration, "auth.User")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								apps/registration/forms.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								apps/registration/forms.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
from django.contrib.auth.forms import UserCreationForm
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django import forms
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
 | 
			
		||||
from registration.models import StudentRegistration, CoachRegistration, AdminRegistration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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 StudentRegistrationForm(forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = StudentRegistration
 | 
			
		||||
        fields = ('student_class', 'school', 'give_contact_to_animath',)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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',)
 | 
			
		||||
							
								
								
									
										29
									
								
								apps/registration/migrations/0002_auto_20200921_1948.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								apps/registration/migrations/0002_auto_20200921_1948.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
# Generated by Django 3.1.1 on 2020-09-21 17:48
 | 
			
		||||
 | 
			
		||||
from django.db import migrations, models
 | 
			
		||||
import django.db.models.deletion
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Migration(migrations.Migration):
 | 
			
		||||
 | 
			
		||||
    dependencies = [
 | 
			
		||||
        ('participation', '0001_initial'),
 | 
			
		||||
        ('registration', '0001_initial'),
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    operations = [
 | 
			
		||||
        migrations.RemoveField(
 | 
			
		||||
            model_name='registration',
 | 
			
		||||
            name='team',
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='coachregistration',
 | 
			
		||||
            name='team',
 | 
			
		||||
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='coachs', to='participation.team', verbose_name='team'),
 | 
			
		||||
        ),
 | 
			
		||||
        migrations.AddField(
 | 
			
		||||
            model_name='studentregistration',
 | 
			
		||||
            name='team',
 | 
			
		||||
            field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='students', to='participation.team', verbose_name='team'),
 | 
			
		||||
        ),
 | 
			
		||||
    ]
 | 
			
		||||
@@ -10,14 +10,6 @@ class Registration(PolymorphicModel):
 | 
			
		||||
        verbose_name=_("user"),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    team = models.ForeignKey(
 | 
			
		||||
        "participation.Team",
 | 
			
		||||
        on_delete=models.PROTECT,
 | 
			
		||||
        null=True,
 | 
			
		||||
        default=None,
 | 
			
		||||
        verbose_name=_("team"),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    give_contact_to_animath = models.BooleanField(
 | 
			
		||||
        default=False,
 | 
			
		||||
        verbose_name=_("Grant Animath to contact me in the future about other actions"),
 | 
			
		||||
@@ -37,6 +29,15 @@ class Registration(PolymorphicModel):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class StudentRegistration(Registration):
 | 
			
		||||
    team = models.ForeignKey(
 | 
			
		||||
        "participation.Team",
 | 
			
		||||
        related_name="students",
 | 
			
		||||
        on_delete=models.PROTECT,
 | 
			
		||||
        null=True,
 | 
			
		||||
        default=None,
 | 
			
		||||
        verbose_name=_("team"),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    student_class = models.IntegerField(
 | 
			
		||||
        choices=[
 | 
			
		||||
            (12, _("12th grade")),
 | 
			
		||||
@@ -61,6 +62,15 @@ class StudentRegistration(Registration):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CoachRegistration(Registration):
 | 
			
		||||
    team = models.ForeignKey(
 | 
			
		||||
        "participation.Team",
 | 
			
		||||
        related_name="coachs",
 | 
			
		||||
        on_delete=models.PROTECT,
 | 
			
		||||
        null=True,
 | 
			
		||||
        default=None,
 | 
			
		||||
        verbose_name=_("team"),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    professional_activity = models.TextField(
 | 
			
		||||
        verbose_name=_("professional activity"),
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								apps/registration/signals.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								apps/registration/signals.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
from registration.models import AdminRegistration
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def set_username(instance, **_):
 | 
			
		||||
    instance.username = instance.email
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def create_admin_registration(instance, **_):
 | 
			
		||||
    if instance.is_superuser:
 | 
			
		||||
        AdminRegistration.objects.get_or_create(user=instance)
 | 
			
		||||
							
								
								
									
										9
									
								
								apps/registration/urls.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								apps/registration/urls.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
from django.urls import path
 | 
			
		||||
 | 
			
		||||
from .views import SignupView
 | 
			
		||||
 | 
			
		||||
app_name = "registration"
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
    path("signup", SignupView.as_view(), name="signup"),
 | 
			
		||||
]
 | 
			
		||||
@@ -1,3 +1,41 @@
 | 
			
		||||
from django.shortcuts import render
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.db import transaction
 | 
			
		||||
from django.urls import reverse_lazy
 | 
			
		||||
from django.views.generic import CreateView
 | 
			
		||||
 | 
			
		||||
# Create your views here.
 | 
			
		||||
from .forms import SignupForm, StudentRegistrationForm, CoachRegistrationForm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class SignupView(CreateView):
 | 
			
		||||
    model = User
 | 
			
		||||
    form_class = SignupForm
 | 
			
		||||
    template_name = "registration/signup.html"
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, **kwargs):
 | 
			
		||||
        context = super().get_context_data()
 | 
			
		||||
 | 
			
		||||
        context["student_registration_form"] = StudentRegistrationForm(self.request.POST or None)
 | 
			
		||||
        context["coach_registration_form"] = CoachRegistrationForm(self.request.POST or None)
 | 
			
		||||
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    @transaction.atomic
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        role = form.cleaned_data["role"]
 | 
			
		||||
        if role == "participant":
 | 
			
		||||
            registration_form = StudentRegistrationForm(self.request.POST)
 | 
			
		||||
        else:
 | 
			
		||||
            registration_form = CoachRegistrationForm(self.request.POST)
 | 
			
		||||
 | 
			
		||||
        if not registration_form.is_valid():
 | 
			
		||||
            return self.form_invalid(form)
 | 
			
		||||
 | 
			
		||||
        ret = super().form_valid(form)
 | 
			
		||||
        registration = registration_form.instance
 | 
			
		||||
        registration.user = form.instance
 | 
			
		||||
        registration.save()
 | 
			
		||||
 | 
			
		||||
        return ret
 | 
			
		||||
 | 
			
		||||
    def get_success_url(self):
 | 
			
		||||
        return reverse_lazy("index")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user