Bonjour
J’ai besoin d’aide concernant mon projet, mais avant je vous explique un peut le principe du projet et ce que j’ai actuellement effectuer.
Mon projet est de faire valider des ‘flags’ aux ‘internautes’, une fois qui ont réussis tel cours comme math, anglais, développement java, etc., ce qui leur permet de gagner des points.
Sur la page de la catégorie développement java par exemple j’aurais au minimum 40 formulaires dont chaque formulaire correspond à un exercice donné qui peut avoir entre 1 ou plusieurs champs (field) à remplir afin de valider l’exercice.
J’ai donc conçu le modèle suivant :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #MODELS class Challenge(models.Model): id_challenge = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) name = models.CharField(max_length=255, default='Table des Challenges') description = models.TextField(blank=False, help_text='Description du challenge') difficulty = models.PositiveIntegerField(default=1, help_text='Niveau de difficulté') challenge_points = models.PositiveIntegerField(default=0, help_text='Nombre de point du challenge') challenge_choice = ( ('Java', 'Java'), ('Go', 'Go'), ('Anglais', 'Anglais'), ('Français', 'Français'), ('Base de la sécurité', 'Base.Securite'), ) genre = models.CharField(max_length=20, choices=challenge_choice, default='Go', help_text='Type de challenge') date_created = models.DateTimeField(auto_now_add=True, verbose_name="Date de création") date_update = models.DateTimeField(auto_now=True, verbose_name="Date de modification") # add_challenge_by = models.ForeignKey(User, on_delete=models.CASCADE) # updated_by = models.ForeignKey(User, on_delete=models.CASCADE) def __str__(self): return self.name class Flag(models.Model): value = models.CharField(max_length=255, help_text='Enregistrement des flags du challenge') challenge = models.ForeignKey('Challenge', on_delete=models.CASCADE)
Ce model là je l’ai importé dans l’admin :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ADMIN class FlagInline(admin.TabularInline): model = Flag extra = 1 @admin.register(Challenge) class ChallengesAdmin(admin.ModelAdmin): inlines = [FlagInline] pass
Donc je me rends sur l’interface admin et me crée un ‘object’ avec les propriétés suivantes :
- Name = Java-Test
- Description = ‘Test d’un premier exercice sous Java’
- Difficulty = 1
- Challenge_points : 05
- Genre : Java
- Value : ‘123’
- Value : ‘456’
- Value : ‘789’
Ensuite j’ai créé le formulaire suivant vus que j’ai 3 champs (field) à valider (les champs ‘value’ créent dans mon objet) alors je crée 3 champs (field) :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #FORMS class FlagJava01Form(forms.Form): flag0 = forms.CharField(max_length=255) flag1 = forms.CharField(max_length=255) flag2 = forms.CharField(max_length=255)
Et ensuite dans ma views :
Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 #VIEWS def template_vm(request): form_java_01 = FlagJava01Form(request.POST or None) user = OnUser.objects.all() java_01 = Challenge.objects.get(name="Java_test") if request.method == 'POST' and form_java_01.is_valid(): if form_java_01.flag0 == java_01.value[0] and form_java_01.flag1 == java_01.value[1] and form_java_01.flag2 == java_01.value[2]: on_user.user = request.user on_user.points += 5 on_user.save() return redirect('/java') else: form_java_01 = FlagJava01Form() else: form_java_01 = FlagJava01Form() return render(request, 'developpement/java.html', { 'form': form_java_01, 'css_perso': 'css_perso_java', 'user': on_user, 'java_01' : java_01 })
Le code fonctionne mais ce que je souhaite savoir sont les questions suivantes :
- Comment faire un formulaire autre qu'un formulaire classique qui s’adapte au nombre de champs (Field) de mon objet crée précédemment (avec les 3 champs ‘value’) ?
- Y a-t-il un moyen d’appeler plusieurs formulaires dans une views, car 40 formulaires si je dois faire des conditions à chaque fois je vais avoir du mal à m’en sortir et ça risque d’être long.
En vous remerciant par avance.
Partager