From dd76b606c2ea0501152abfa4f9b017e8f2200e98 Mon Sep 17 00:00:00 2001 From: Davy39 Date: Tue, 25 Jan 2022 14:20:56 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20du=20mod=C3=A8le=20Sp=C3=A9cialit=C3=A9?= =?UTF-8?q?=20et=20de=203=20champs=20de=20sp=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inscription/forms.py | 22 +++-- inscription/models.py | 17 +++- ...leve_spe1_baseeleve_spe2_baseeleve_spe3.py | 80 +++++++++++++++++++ .../inscription/formulaire_inscription.html | 2 +- 4 files changed, 112 insertions(+), 9 deletions(-) create mode 100644 migrations/inscription/0006_spe_baseeleve_spe1_baseeleve_spe2_baseeleve_spe3.py diff --git a/inscription/forms.py b/inscription/forms.py index 0d37151..3e125c9 100644 --- a/inscription/forms.py +++ b/inscription/forms.py @@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _ from crispy_forms.bootstrap import FormActions, InlineField, InlineCheckboxes from crispy_forms.helper import FormHelper -from crispy_forms.layout import Div, Fieldset, Layout, Submit +from crispy_forms.layout import Div, Fieldset, Layout, Submit, Column, Field, HTML from .models import BaseEleve from .utils import CaptchaWizardField # Pour l'autocomplétion de la commune en fonction du département choisi @@ -141,7 +141,8 @@ class Meta: # Modèle utilisé et entrées à renseigner model = BaseEleve fields = ['address', 'civility', 'genre', 'nom', 'prenom', 'nom_usage', 'date_naissance', 'pays_naissance', - 'photo', 'commune_naissance', 'departement_naissance', 'telephone', 'email', 'confirmation_email', 'nationalite', 'ville_natale'] + 'photo', 'commune_naissance', 'departement_naissance', 'telephone', 'email', 'confirmation_email', + 'nationalite', 'ville_natale',] # Ajout d'un date picker au format='%Y-%m-%d' pour qu'il affiche les valeurs initiales lors des update # https://stackoverflow.com/questions/58294769/django-forms-dateinput-not-populating-from-instance widgets = { @@ -233,15 +234,24 @@ def __init__(self, *args, **kwargs): # FormHelper pour customiser ton formulaire self.helper = FormHelper() # Id et classe bootstrap de ton formulaire - self.helper.form_class = 'form-horizontal' + #self.helper.form_class = 'form-horizontal' self.helper.form_id = 'BaseEleve-form' # Largeur des labels et des champs sur la grille - self.helper.label_class = 'col-md-4' - self.helper.field_class = 'col-md-6' + #self.helper.label_class = 'col-md-4' + #self.helper.field_class = 'col-md-6' + self.fields['spe1'].label = False + self.fields['spe2'].label = False + self.fields['spe3'].label = False # Affichage du formulaire self.helper.layout = Layout( # Liste des champs à afficher dont les champs supplémentaires 'comments', + HTML(""""""), + Div( + Field('spe1', wrapper_class='col'), + Field('spe2', wrapper_class='col'), + Field('spe3', wrapper_class='col'), + css_class='row'), InlineCheckboxes('dys'), 'captcha', ) @@ -250,5 +260,5 @@ class Meta: # Définis le modèle utilisé et des données à enregistrer model = BaseEleve fields = [ - 'comments', 'dys', + 'comments', 'dys','spe1', 'spe2', 'spe3', ] diff --git a/inscription/models.py b/inscription/models.py index c3ac45f..e865d2d 100644 --- a/inscription/models.py +++ b/inscription/models.py @@ -5,6 +5,17 @@ from .utils import nom_photo, create_hash +class Spe(models.Model): + code = models.CharField(max_length=9, verbose_name="Code Spé") + intitule = models.CharField(max_length=9, verbose_name="Intitulé Spé") + groupe = models.CharField(max_length=100, verbose_name="Groupe Spé", null=True, blank=True) + type = models.CharField(max_length=100, verbose_name="Type Spé", null=True, blank=True) + + def __str__(self): + """Indique ce que donne l'affichage de la classe, notamment dans les menus déroulants""" + return u'%s' % self.intitule + + class Sociopro(models.Model): """Base de donnée des codes socioprofessionnels. Le données sont importées depuis le fichier CSV grâce à la commande python manage.py sociopro""" @@ -122,7 +133,6 @@ def __iter__(self): tel_resp2 = PhoneNumberField(verbose_name="Numéro de téléphone", blank=True, null=True) sociopro_resp2 = models.ForeignKey(Sociopro, related_name='resp2', on_delete=models.CASCADE, verbose_name="Profession", blank=True, null=True) - DYS = ( ('DL', 'Dyslexie'), ('DC', 'Dyscalculie'), @@ -130,4 +140,7 @@ def __iter__(self): ('DG', 'Dysgraphie'), ('DO', 'Dysorthographie') ) - dys = MultiSelectField(choices=DYS,verbose_name='Troubles cognitifs', blank=True, null=True) \ No newline at end of file + dys = MultiSelectField(choices=DYS, verbose_name='Troubles cognitifs', blank=True, null=True) + spe1 = models.ManyToManyField(Spe, limit_choices_to={'groupe': '1'}, blank=True, related_name='spe1') + spe2 = models.ManyToManyField(Spe, limit_choices_to={'groupe': '2'}, blank=True, related_name='spe2') + spe3 = models.ManyToManyField(Spe, limit_choices_to={'groupe': '3'}, blank=True, related_name='spe3') diff --git a/migrations/inscription/0006_spe_baseeleve_spe1_baseeleve_spe2_baseeleve_spe3.py b/migrations/inscription/0006_spe_baseeleve_spe1_baseeleve_spe2_baseeleve_spe3.py new file mode 100644 index 0000000..c3cf71a --- /dev/null +++ b/migrations/inscription/0006_spe_baseeleve_spe1_baseeleve_spe2_baseeleve_spe3.py @@ -0,0 +1,80 @@ +# Generated by Django 4.0 on 2022-01-25 12:03 + +from django.db import migrations, models + +SPES = ( + ('ARTCIN', 'Cinéma', '1', 'art'), + ('ARTTHEA', 'Théâtre', '1', 'art'), + ('ARTMUS', 'Musique', '1', 'art'), + ('ARTPLA', 'Arts plastiques', '1', 'art'), + ('HISTGEO', 'Histoire-Géo-Pol', '1', None), + ('MATH', 'Mathématiques', '1', None), + ('HUMPHI', 'Humanités, littérature et philosophie', '2', None), + ('PHYCHI', 'Physique-Chimie', '2', None), + ('ECOSOC', 'Sciences économiques et sociales', '2', None), + ('SVT', 'Sciences de la vie et de la terre', '3', None), + ('LLCERANG', 'Anglais', '3', 'LLCE'), + ('LLCERESP ', 'Espagnol', '3', 'LLCE'), + ('ARTCIRQ', 'Arts du cirque', None, 'art'), + ('ARTHIST', 'Histoire des arts', None, 'art'), + ('ARTDAN', 'Danse', None, 'art'), + ('BIOLO', 'Biologie - écologie', None, None), + ('SCING', "Sciences de l'ingénieur", None, None), + ('LLCERANGMC', 'Anglais monde contemporain', None, 'LLCE'), + ('LLCERALL', 'Allemand', None, 'LLCE'), + ('NUMINF', 'Numérique et sciences informatiques', None, None), + ) + + +def import_spe(apps, schema_editor): + data = [] + Spe = apps.get_model("inscription", "Spe") + for spe in SPES: + code, intitule, groupe, te = spe + data.append(Spe(code=code, intitule=intitule, groupe=groupe, type=te)) + db_alias = schema_editor.connection.alias + Spe.objects.using(db_alias).bulk_create(data) + + +def delete_spe(apps, schema_editor): + Spe = apps.get_model("inscription", "Spe") + db_alias = schema_editor.connection.alias + for spe in SPES: + for code, intitule, groupe, type in spe: + Spe.objects.using(db_alias).filter(code=code).delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('inscription', '0005_baseeleve_dys_baseeleve_ville_natale_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Spe', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('code', models.CharField(max_length=9, verbose_name='Code Spé')), + ('intitule', models.CharField(max_length=9, verbose_name='Intitulé Spé')), + ('groupe', models.CharField(max_length=100, verbose_name='Groupe Spé', blank=True, null=True)), + ('type', models.CharField(blank=True, max_length=100, null=True, verbose_name='Type Spé')), + ], + ), + migrations.AddField( + model_name='baseeleve', + name='spe1', + field=models.ManyToManyField(blank=True, limit_choices_to={'groupe': '1'}, related_name='spe1', to='inscription.Spe'), + ), + migrations.AddField( + model_name='baseeleve', + name='spe2', + field=models.ManyToManyField(blank=True, limit_choices_to={'groupe': '2'}, related_name='spe2', to='inscription.Spe'), + ), + migrations.AddField( + model_name='baseeleve', + name='spe3', + field=models.ManyToManyField(blank=True, limit_choices_to={'groupe': '3'}, related_name='spe3', to='inscription.Spe'), + ), + migrations.RunPython(import_spe,delete_spe), + ] diff --git a/templates/inscription/formulaire_inscription.html b/templates/inscription/formulaire_inscription.html index 228f8cb..e5ff544 100644 --- a/templates/inscription/formulaire_inscription.html +++ b/templates/inscription/formulaire_inscription.html @@ -16,7 +16,7 @@

Inscription au Lycée Expérimental

-
+

Étape {{ wizard.steps.step1 }} sur {{ wizard.steps.count }} - {{ wizard.form.name }}