Exercices Concepts Web & Django Formulaire avec choix et champs optionnels
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Formulaire avec choix et champs optionnels

Les formulaires Django offrent de nombreux types de champs specialises. Voici les plus utiles :

ChoiceField affiche une liste deroulante :

COULEURS = [('rouge', 'Rouge'), ('bleu', 'Bleu'), ('vert', 'Vert')]
couleur = forms.ChoiceField(choices=COULEURS)

BooleanField affiche une case a cocher :

accepte = forms.BooleanField(required=False)

Le paramètre required=False rend un champ optionnel. Par défaut, tous les champs sont obligatoires.

DecimalField pour les montants avec precision :

montant = forms.DecimalField(max_digits=10, decimal_places=2)

Crée un formulaire EventRegistrationForm avec :
- name : CharField, max 100
- email : EmailField
- event_type : ChoiceField avec les choix [('conference', 'Conference'), ('workshop', 'Atelier'), ('meetup', 'Meetup'), ('webinar', 'Webinaire')]
- nb_guests : IntegerField, min_value=0, max_value=5, required=False (nombre d'accompagnants)
- dietary_restrictions : CharField, max 200, required=False (restrictions alimentaires)
- accepts_terms : BooleanField (doit etre coche, donc required=True par défaut)

Ajoute une méthode clean_nb_guests qui retourne 0 si la valeur est None (car le champ est optionnel).

Exemple :

form = EventRegistrationForm(data={
'name': 'Alice', 'email': 'a@b.com',
'event_type': 'conference', 'accepts_terms': True
})
form.is_valid() vaut True
form.cleaned_data['nb_guests'] vaut 0

Tests (4/5)

Formulaire valide minimal
form = EventRegistrationForm(data={'name': 'Alice', 'email': 'a@b.com', 'event_type': 'conference', 'accepts_terms': True})
assert form.is_valid() == True
nb_guests défaut 0
form = EventRegistrationForm(data={'name': 'Alice', 'email': 'a@b.com', 'event_type': 'workshop', 'accepts_terms': True})
form.is_valid()
assert form.cleaned_data['nb_guests'] == 0
event_type invalide
form = EventRegistrationForm(data={'name': 'Alice', 'email': 'a@b.com', 'event_type': 'fete', 'accepts_terms': True})
assert form.is_valid() == False
assert 'event_type' in form.errors
accepts_terms obligatoire
form = EventRegistrationForm(data={'name': 'Alice', 'email': 'a@b.com', 'event_type': 'meetup'})
assert form.is_valid() == False
assert 'accepts_terms' in form.errors

+ 0 tests cachés

Indices (3 disponibles)

solution.py