Champs de formulaires¶
-
class
Field
(**kwargs)¶
Lorsque vous créez une classe Form
, la partie la plus importante est de dĂ©finir les champs du formulaire. Chaque champ possĂšde sa propre logique de validation, ainsi que quelques autres points dâentrĂ©e.
-
Field.
clean
(value)¶
MĂȘme si lâemploi principal des classes Field
concerne la définition de classes Form
, il est aussi possible de les instancier et de les utiliser directement pour obtenir une meilleure idée de leur fonctionnement. Chaque instance Field
possÚde une méthode clean()
acceptant un seul paramÚtre et qui renvoie une valeur « nettoyée » ou qui génÚre une exception django.core.exceptions.ValidationError
:
>>> from django import forms
>>> f = forms.EmailField()
>>> f.clean('foo@example.com')
'foo@example.com'
>>> f.clean('invalid email address')
Traceback (most recent call last):
...
ValidationError: ['Enter a valid email address.']
ParamÚtres principaux des champs¶
Chaque constructeur de classe Field
accepte au moins trois paramĂštres. Certaines classes acceptent dâautres paramĂštres spĂ©cifiques Ă la classe, mais ceux qui suivent sont toujours acceptĂ©s :
required
¶
-
Field.
required
¶
Par défaut, chaque classe Field
suppose quâune valeur est obligatoire, ce qui fait que si vous ne fournissez pas de valeur (que ce soit None
ou une chaĂźne vide(""
)), clean()
génÚre une exception ValidationError
:
>>> from django import forms
>>> f = forms.CharField()
>>> f.clean('foo')
'foo'
>>> f.clean('')
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
>>> f.clean(None)
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
>>> f.clean(' ')
' '
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'
Pour indiquer quâun champ nâest pas obligatoire, passez required=False
au constructeur de Field
:
>>> f = forms.CharField(required=False)
>>> f.clean('foo')
'foo'
>>> f.clean('')
''
>>> f.clean(None)
''
>>> f.clean(0)
'0'
>>> f.clean(True)
'True'
>>> f.clean(False)
'False'
Lorsque required=False
est défini pour un champ Field
et que vous fournissez une valeur vide Ă clean()
, la valeur renvoyée est une valeur vide normalisée et aucune exception ValidationError
nâest gĂ©nĂ©rĂ©e. Pour CharField
, la valeur renvoyée correspond à empty_value
qui est une chaßne vide par défaut. Pour les autres classes Field
, il peut sâagir de None
(cela varie en fonction du champ).
Les composants des champs de formulaire obligatoires possĂšdent lâattribut HTML required
. Il est possible de dĂ©sactiver cela en dĂ©finissant lâattribut Form.use_required_attribute
Ă False
. Lâattribut required
nâest pas ajoutĂ© aux formulaires groupĂ©s car la validation des navigateurs nâest pas toujours correcte quand on ajoute ou quâon supprime de tels formulaires.
label
¶
-
Field.
label
¶
Le paramĂštre label
permet dâindiquer une Ă©tiquette conviviale pour le champ. Cette valeur est utilisĂ©e lorsque le champ Field
est affiché dans un formulaire Form
.
Comme expliquĂ© dans « Affichage des formulaires en HTML » ci-dessus, lâĂ©tiquette par dĂ©faut dâun champ Field
est générée à partir du nom de champ en convertissant tous les soulignements en espaces et en mettant en majuscule la premiÚre lettre. Donnez une valeur à label
si ce comportement par défaut ne produit pas un résultat convenable.
Voici un exemple complet de formulaire implémentant label
pour deux de ses champs. Nous avons indiqué auto_id=False
pour simplifier lâaffichage :
>>> from django import forms
>>> class CommentForm(forms.Form):
... name = forms.CharField(label='Your name')
... url = forms.URLField(label='Your website', required=False)
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print(f)
<tr><th>Your name:</th><td><input type="text" name="name" required></td></tr>
<tr><th>Your website:</th><td><input type="url" name="url"></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr>
label_suffix
¶
-
Field.
label_suffix
¶
Le paramĂštre label_suffix
permet de surcharger lâattribut label_suffix
dâun formulaire pour un champ particulier :
>>> class ContactForm(forms.Form):
... age = forms.IntegerField()
... nationality = forms.CharField()
... captcha_answer = forms.IntegerField(label='2 + 2', label_suffix=' =')
>>> f = ContactForm(label_suffix='?')
>>> print(f.as_p())
<p><label for="id_age">Age?</label> <input id="id_age" name="age" type="number" required></p>
<p><label for="id_nationality">Nationality?</label> <input id="id_nationality" name="nationality" type="text" required></p>
<p><label for="id_captcha_answer">2 + 2 =</label> <input id="id_captcha_answer" name="captcha_answer" type="number" required></p>
initial
¶
-
Field.
initial
¶
Le paramĂštre initial
permet dâindiquer la valeur initiale Ă utiliser lors de lâaffichage HTML du champ dans un formulaire Form
non lié.
Pour indiquer des données initiales dynamiques, voir le paramÚtre Form.initial
.
Le cas dâutilisation typique est lorsque lâon veut afficher un formulaire vierge dans lequel un champ contient initialement une valeur. Par exemple :
>>> from django import forms
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> f = CommentForm(auto_id=False)
>>> print(f)
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" required></td></tr>
<tr><th>Url:</th><td><input type="url" name="url" value="http://" required></td></tr>
<tr><th>Comment:</th><td><input type="text" name="comment" required></td></tr>
Vous vous demandez peut-ĂȘtre pourquoi on ne passe pas simplement un dictionnaire de valeurs initiales dans le paramĂštre data
au moment dâafficher le formulaire ? Le problĂšme de cette solution est que cela provoque la validation des donnĂ©es et que le rĂ©sultat HTML contiendra alors dâĂ©ventuelles erreurs de validation :
>>> class CommentForm(forms.Form):
... name = forms.CharField()
... url = forms.URLField()
... comment = forms.CharField()
>>> default_data = {'name': 'Your name', 'url': 'http://'}
>>> f = CommentForm(default_data, auto_id=False)
>>> print(f)
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" required></td></tr>
<tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="url" name="url" value="http://" required></td></tr>
<tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" required></td></tr>
Câest pourquoi les valeurs initiales ne sont affichĂ©es que pour les formulaires non liĂ©s. Pour les formulaires liĂ©s, le rĂ©sultat HTML utilise les donnĂ©es liĂ©es.
Notez Ă©galement que les valeurs initiales ne sont pas utilisĂ©es comme donnĂ©es de repli dans la validation lorsquâune valeur de champ est manquante. Les valeurs initiales sont uniquement destinĂ©es Ă lâaffichage initial dâun formulaire :
>>> class CommentForm(forms.Form):
... name = forms.CharField(initial='Your name')
... url = forms.URLField(initial='http://')
... comment = forms.CharField()
>>> data = {'name': '', 'url': '', 'comment': 'Foo'}
>>> f = CommentForm(data)
>>> f.is_valid()
False
# The form does *not* fall back to using the initial values.
>>> f.errors
{'url': ['This field is required.'], 'name': ['This field is required.']}
Au lieu dâune constante, il est aussi possible de transmettre un objet exĂ©cutable :
>>> import datetime
>>> class DateForm(forms.Form):
... day = forms.DateField(initial=datetime.date.today)
>>> print(DateForm())
<tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" required><td></tr>
Lâobjet exĂ©cutable ne sera Ă©valuĂ© quâau moment oĂč le formulaire non liĂ© est affichĂ©, et non pas au moment de sa dĂ©finition.
widget
¶
-
Field.
widget
¶
Le paramĂštre widget
permet dâindiquer une classe Widget
Ă utiliser lors du rendu HTML de ce champ. Voir Composants de formulaires (« widgets ») pour plus dâinformations.
help_text
¶
-
Field.
help_text
¶
Le paramĂštre help_text
vous permet de dĂ©finir du texte descriptif pour ce champ. Sâil est dĂ©fini, il sera affichĂ© prĂšs du champ lorsque celui-ci sera affichĂ© en HTML par lâune des mĂ©thodes de raccourci de Form
(par ex. as_ul()
).
Tout comme lâattribut help_text
dâun champ de modĂšle, cette valeur nâest pas sujette Ă lâĂ©chappement HTML dans les formulaires gĂ©nĂ©rĂ©s automatiquement.
Voici un exemple complet de formulaire implémentant help_text
pour deux de ses champs. Nous avons indiqué auto_id=False
pour simplifier lâaffichage :
>>> from django import forms
>>> class HelpTextContactForm(forms.Form):
... subject = forms.CharField(max_length=100, help_text='100 characters max.')
... message = forms.CharField()
... sender = forms.EmailField(help_text='A valid email address, please.')
... cc_myself = forms.BooleanField(required=False)
>>> f = HelpTextContactForm(auto_id=False)
>>> print(f.as_table())
<tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" required><br><span class="helptext">100 characters max.</span></td></tr>
<tr><th>Message:</th><td><input type="text" name="message" required></td></tr>
<tr><th>Sender:</th><td><input type="email" name="sender" required><br>A valid email address, please.</td></tr>
<tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself"></td></tr>
>>> print(f.as_ul()))
<li>Subject: <input type="text" name="subject" maxlength="100" required> <span class="helptext">100 characters max.</span></li>
<li>Message: <input type="text" name="message" required></li>
<li>Sender: <input type="email" name="sender" required> A valid email address, please.</li>
<li>Cc myself: <input type="checkbox" name="cc_myself"></li>
>>> print(f.as_p())
<p>Subject: <input type="text" name="subject" maxlength="100" required> <span class="helptext">100 characters max.</span></p>
<p>Message: <input type="text" name="message" required></p>
<p>Sender: <input type="email" name="sender" required> A valid email address, please.</p>
<p>Cc myself: <input type="checkbox" name="cc_myself"></p>
error_messages
¶
-
Field.
error_messages
¶
Le paramĂštre error_messages
permet de redĂ©finir les messages par dĂ©faut que le champ renvoie. Passez un dictionnaire dont les clĂ©s correspondent aux messages dâerreur que vous voulez redĂ©finir. Par exemple, voici le message dâerreur par dĂ©faut :
>>> from django import forms
>>> generic = forms.CharField()
>>> generic.clean('')
Traceback (most recent call last):
...
ValidationError: ['This field is required.']
Et voici un message dâerreur personnalisĂ© :
>>> name = forms.CharField(error_messages={'required': 'Please enter your name'})
>>> name.clean('')
Traceback (most recent call last):
...
ValidationError: ['Please enter your name']
Dans la section Classes de champs Field intégrées ci-dessous, chaque champ Field
dĂ©finit les clĂ©s de messages dâerreur quâil utilise.
validators
¶
-
Field.
validators
¶
Le paramĂštre validators
permet de définir une liste de fonctions de validation pour le champ.
Consultez la documentation des validateurs pour plus dâinformations.
localize
¶
-
Field.
localize
¶
Le paramĂštre localize
active la rĂ©gionalisation des donnĂ©es de formulaires, aussi bien au niveau de la saisie que de lâaffichage produit.
Consultez la documentation sur la rĂ©gionalisation de la mise en forme pour plus dâinformations.
disabled
¶
-
Field.
disabled
¶
Le paramÚtre booléen disabled
, lorsquâil est dĂ©fini Ă True
, dĂ©sactive un champ de formulaire en utilisant lâattribut HTML disabled
afin quâil ne soit pas modifiable par les utilisateurs. MĂȘme si quelquâun forçait la modification de la valeur du champ soumis au serveur, elle serait ignorĂ©e en faveur de la valeur fournie initialement au formulaire.
ContrÎle des données de champ modifiées¶
has_changed()
¶
-
Field.
has_changed
()¶
La méthode has_changed()
est utilisée pour déterminer si la valeur du champ a été modifiée par rapport à sa valeur initiale. Renvoie True
ou False
.
Consultez la documentation de Form.has_changed()
pour plus de détails.
Classes de champs Field
intégrées¶
Bien évidemment, la bibliothÚque des formulaires est livrée avec une série de classes Field
représentant les besoins de validation les plus courants. Cette section décrit chaque champ intégré dans Django.
Pour chaque champ, nous indiquons le composant utilisé par défaut quand widget
nâest pas prĂ©cisĂ©. Nous indiquons Ă©galement la valeur renvoyĂ©e lorsquâune valeur vide est fournie (voir la section sur required
ci-dessus pour comprendre ce que cela signifie).
BooleanField
¶
-
class
BooleanField
(**kwargs)¶ - Composant par défaut :
CheckboxInput
- Valeur vide :
False
- Est normalisé en : une valeur Python
True
ouFalse
. - Valide que la valeur est
True
(signifiant par exemple que la case à cocher est cochée) sirequired=True
pour ce champ. - ClĂ©s de messages dâerreur :
required
Note
Comme toutes les sous-classes de
Field
héritentrequired=True
par défaut, la condition de validation est importante à cet endroit. Si vous souhaitez inclure une valeur booléenne dans un formulaire qui puisse valoir aussi bienTrue
queFalse
(par exemple une case cochée ou non), vous devez vous rappeler de passerrequired=False
au moment de créer le champBooleanField
.- Composant par défaut :
CharField
¶
-
class
CharField
(**kwargs)¶ - Composant par défaut :
TextInput
- Valeur vide : ce qui a été indiqué dans
empty_value
. - Est normalisé en : une chaßne.
- Utilise
MaxLengthValidator
etMinLengthValidator
simax_length
etmin_length
sont fournis. Sinon, toutes les entrĂ©es sont valides. - ClĂ©s de messages dâerreur :
required
,max_length
,min_length
PossÚde quatre paramÚtres facultatifs liés à la validation :
-
max_length
¶
-
min_length
¶ Quand ils sont fournis, ces paramÚtres garantissent que la chaßne de caractÚres correspond au maximum ou au minimum à la longueur donnée.
-
strip
¶ Si
True
(valeur par dĂ©faut), la valeur sera Ă©purĂ©e dâĂ©ventuelles espaces initiales ou finales.
-
empty_value
¶ La valeur à utiliser pour représenter une valeur vide. Contient une chaßne vide par défaut.
- Composant par défaut :
ChoiceField
¶
-
class
ChoiceField
(**kwargs)¶ - Composant par défaut :
Select
- Valeur vide :
''
(une chaßne vide) - Est normalisé en : une chaßne.
- Valide que la valeur donnée existe dans la liste à choix.
- ClĂ©s de messages dâerreur :
required
,invalid_choice
Le message dâerreur
invalid_choice
peut contenir%(value)s
, qui sera remplacé par le choix sélectionné.Accepte un paramÚtre supplémentaire :
-
choices
¶ Soit un object itĂ©rable de tuples Ă 2 valeurs Ă utiliser comme liste de choix pour ce champ, soit des choix dâune Ă©numĂ©ration, soit un objet exĂ©cutable qui renvoie un tel objet itĂ©rable. Ce paramĂštre accepte les mĂȘmes formats que le paramĂštre
choices
dâun champ de modĂšle. Consultez la documentation des champs de modĂšles sur les choix pour plus de dĂ©tails. Si le paramĂštre est un exĂ©cutable, il est Ă©valuĂ© lors de chaque initialisation du formulaire contenant le champ, en plus de lâĂ©valuation au moment du rendu. Par dĂ©faut, câest une liste vide.
- Composant par défaut :
TypedChoiceField
¶
-
class
TypedChoiceField
(**kwargs)¶ Similaire Ă
ChoiceField
, sauf queTypedChoiceField
accepte deux paramÚtres supplémentaires,coerce
etempty_value
.- Composant par défaut :
Select
- Valeur vide : ce qui a été indiqué dans
empty_value
. - Est normalisé en : une valeur du type indiqué par le paramÚtre
coerce
. - Valide que la valeur donnĂ©e existe dans la liste Ă choix et quâelle peut ĂȘtre transformĂ©e dans le bon type.
- ClĂ©s de messages dâerreur :
required
,invalid_choice
Accepte des paramÚtres supplémentaires :
-
coerce
¶ Une fonction acceptant un paramÚtre et renvoyant une valeur transtypée. Comme exemple, on peut mentionner les fonctions Python
int
,float
,bool
et les autres types. Par dĂ©faut, il sâagit de la fonction identitĂ©. Notez que le forçage de type se produit aprĂšs la validation de saisie, il est donc possible de forcer une valeur qui nâest pas prĂ©sente danschoices
.
-
empty_value
¶ La valeur utilisĂ©e pour signifier « vide ». Par dĂ©faut, il sâagit de la chaĂźne vide ;
None
est une autre option assez fréquente ici. Remarquez que le type de cette valeur ne sera pas transformé par le contenu du paramÚtrecoerce
, il faut donc la choisir en conséquence.
- Composant par défaut :
DateField
¶
-
class
DateField
(**kwargs)¶ - Composant par défaut :
DateInput
- Valeur vide :
None
- Est normalisé en : un objet Python
datetime.date
. - Valide que la valeur donnée est un objet
datetime.date
,datetime.datetime
ou une chaĂźne mise en forme dans un format de date particulier. - ClĂ©s de messages dâerreur :
required
,invalid
Accepte un paramĂštre facultatif :
-
input_formats
¶ Une liste de chaßnes de format utilisées pour essayer de convertir une chaßne en un objet
datetime.date
valide.
Si aucun paramĂštre
input_formats
nâest indiquĂ©, les formats dâentrĂ©e par dĂ©faut sont lus dans dansDATE_INPUT_FORMATS
siUSE_L10N
estFalse
, ou dans la cléDATE_INPUT_FORMATS
de la langue active si la régionalisation est activée. Voir aussi la régionalisation des formats.- Composant par défaut :
DateTimeField
¶
-
class
DateTimeField
(**kwargs)¶ - Composant par défaut :
DateTimeInput
- Valeur vide :
None
- Est normalisé en : un objet Python
datetime.datetime
. - Valide que la valeur donnée est un objet
datetime.datetime
,datetime.date
ou une chaĂźne mise en forme dans un format de date/heure particulier. - ClĂ©s de messages dâerreur :
required
,invalid
Accepte un paramĂštre facultatif :
-
input_formats
¶ Une liste de chaßnes de format utilisées pour essayer de convertir une chaßne en un objet
datetime.datetime
valide, en plus des formats ISO 8601.
Le champ accepte toujours les chaßnes mises en forme selon le format ISO 8601 ou apparenté reconnues par
parse_datetime()
. Voici quelques exemples* '2006-10-25 14:30:59' * '2006-10-25T14:30:59' * '2006-10-25 14:30' * '2006-10-25T14:30' * '2006-10-25T14:30Z' * '2006-10-25T14:30+02:00' * '2006-10-25'
Si aucun paramĂštre
input_formats
nâest indiquĂ©, les formats dâentrĂ©e par dĂ©faut sont lus dans dansDATETIME_INPUT_FORMATS
etDATE_INPUT_FORMATS
siUSE_L10N
estFalse
, ou dans les clésDATETIME_INPUT_FORMATS
etDATE_INPUT_FORMATS
de la langue active si la régionalisation est activée. Voir aussi la régionalisation des formats.Changed in Django 3.1:La prise en charge des formats de date ISO 8601 (y compris un éventuel fuseau horaire) a été ajoutée.
Le recours Ă
DATE_INPUT_FORMATS
si nécessaire dans la valeurinput_formats
par défaut a été ajouté.- Composant par défaut :
DecimalField
¶
-
class
DecimalField
(**kwargs)¶ - Composant par défaut :
NumberInput
lorsqueField.localize
vautFalse
, sinonTextInput
. - Valeur vide :
None
- Est normalisé en : un objet Python
decimal
. - Valide que la valeur donnée est un nombre décimal. Utilise
MaxValueValidator
etMinValueValidator
simax_value
etmin_value
sont fournis. Les espaces de dĂ©but et de fin sont ignorĂ©s. - ClĂ©s de messages dâerreur :
required
,invalid
,max_value
,min_value
,max_digits
,max_decimal_places
,max_whole_digits
Les messages dâerreur
max_value
etmin_value
peuvent contenir%(limit_value)s
, qui sera remplacĂ© par la limite concernĂ©e. Sur le mĂȘme principe, les messages dâerreurmax_digits
,max_decimal_places
etmax_whole_digits
peuvent contenir%(max)s
.Accepte quatre paramĂštres facultatifs :
-
max_value
¶
-
min_value
¶ Ces paramĂštres contrĂŽlent les intervalles de valeurs autorisĂ©es dans le champ et doivent ĂȘtre exprimĂ©s en valeurs
decimal.Decimal
.
-
max_digits
¶ Le nombre maximum de chiffres autorisés dans la valeur (avant et aprÚs le point décimal, sans tenir compte des zéros initiaux).
-
decimal_places
¶ Le nombre maximal de décimales autorisées.
- Composant par défaut :
DurationField
¶
-
class
DurationField
(**kwargs)¶ - Composant par défaut :
TextInput
- Valeur vide :
None
- Est normalisé en : un objet Python
timedelta
. - Valide que la valeur donnĂ©e est une chaĂźne qui peut ĂȘtre convertie en une diffĂ©rence de temps
timedelta
. La valeur doit ĂȘtre comprise entredatetime.timedelta.min
etdatetime.timedelta.max
. - ClĂ©s de messages dâerreur :
required
,invalid
,overflow
.
Accepte tout format que
parse_duration()
peut analyser.- Composant par défaut :
EmailField
¶
-
class
EmailField
(**kwargs)¶ - Composant par défaut :
EmailInput
- Valeur vide : ce qui a été indiqué dans
empty_value
. - Est normalisé en : une chaßne.
- Utilise
EmailValidator
pour valider que la valeur donnĂ©e est une adresse de courriel valide, en utilisant une expression rĂ©guliĂšre moyennement complexe. - ClĂ©s de messages dâerreur :
required
,invalid
PossĂšde trois paramĂštres facultatifs
max_length
,min_length
etempty_value
, qui fonctionnent exactement comme pourCharField
.- Composant par défaut :
FileField
¶
-
class
FileField
(**kwargs)¶ - Composant par défaut :
ClearableFileInput
- Valeur vide :
None
- Est normalisé en : un objet
UploadedFile
englobant le contenu du fichier et son nom dans un seul objet. - Peut valider que des données de fichier non vides ont été fournies au formulaire.
- ClĂ©s de messages dâerreur :
required
,invalid
,missing
,empty
,max_length
Accepte deux paramĂštres facultatifs pour la validation,
max_length
etallow_empty_file
. Sâils sont prĂ©sents, ils garantissent respectivement que la longueur du nom de fichier ne dĂ©passe pas la longueur indiquĂ©e et que la validation passe mĂȘme quand le contenu du fichier est vide.Pour en savoir plus au sujet de lâobjet
UploadedFile
, consultez la documentation sur les envois de fichiers.Lorsque vous utilisez un champ
FileField
dans un formulaire, vous ne devez pas oublier de lier les donnĂ©es de fichier au formulaire.Lâerreur
max_length
porte sur la longueur du nom de fichier. Dans le message dâerreur de cette clĂ©,%(max)d
sera remplacé par la longueur maximale du nom de fichier et%(length)d
sera remplacé par la longueur effective du nom de fichier.- Composant par défaut :
FilePathField
¶
-
class
FilePathField
(**kwargs)¶ - Composant par défaut :
Select
- Valeur vide :
''
(une chaßne vide) - Est normalisé en : une chaßne.
- Valide que le choix sélectionné existe dans la liste à choix.
- ClĂ©s de messages dâerreur :
required
,invalid_choice
Ce champ permet de choisir parmi des fichiers dans un répertoire désigné. Il accepte cinq paramÚtres supplémentaires ; seul
path
est obligatoire :-
path
¶ Le chemin absolu vers le rĂ©pertoire dont le contenu doit ĂȘtre prĂ©sent dans la liste. Ce rĂ©pertoire doit exister.
-
recursive
¶ Si
False
(valeur par défaut), seul le contenu au premier niveau depath
sera Ă disposition dans les choix possibles. SiTrue
, le répertoire sera parcouru récursivement et tous ses descendants seront inclus dans les choix possibles.
-
match
¶ Un motif dâexpression rĂ©guliĂšre ; seuls les fichiers dont les noms correspondent Ă cette expression seront disponibles dans la liste Ă choix.
-
allow_files
¶ Facultatif. Vaut
True
ouFalse
. La valeur par défaut estTrue
. Indique si les fichiers de lâemplacement spĂ©cifiĂ© doivent ĂȘtre inclus. Il faut que lâune des deux valeurs, ce champ ouallow_folders
, soitTrue
.
-
allow_folders
¶ Facultatif. Vaut
True
ouFalse
. La valeur par défaut estFalse
. Indique si tous les rĂ©pertoires Ă lâintĂ©rieur de lâemplacement spĂ©cifiĂ© doivent ĂȘtre inclus. Il faut que lâune des deux valeurs, ce champ ouallow_files
, soitTrue
.
- Composant par défaut :
FloatField
¶
-
class
FloatField
(**kwargs)¶ - Composant par défaut :
NumberInput
lorsqueField.localize
vautFalse
, sinonTextInput
. - Valeur vide :
None
- Est normalisé en : un objet Python float.
- Valide que la valeur donnée est un nombre à virgule. Utilise
MaxValueValidator
etMinValueValidator
simax_value
etmin_value
sont fournis. Les espaces de début et de fin sont permis, comme pour la fonctionfloat()
de Python. - ClĂ©s de messages dâerreur :
required
,invalid
,max_value
,min_value
Accepte deux paramĂštres facultatifs pour la validation,
max_value
etmin_value
. Ces paramĂštres contrĂŽlent lâintervalle des valeurs autorisĂ©es dans ce champ.- Composant par dĂ©faut :
ImageField
¶
-
class
ImageField
(**kwargs)¶ - Composant par défaut :
ClearableFileInput
- Valeur vide :
None
- Est normalisé en : un objet
UploadedFile
englobant le contenu du fichier et son nom dans un seul objet. - Valide que les données de fichier ont été liées au formulaire. Utilise aussi
FileExtensionValidator
pour valider que lâextension de fichier est prise en charge par Pillow. - ClĂ©s de messages dâerreur :
required
,invalid
,missing
,empty
,invalid_image
Lâemploi de
ImageField
requiert que Pillow soit installĂ© et gĂšre les formats dâimage que vous utilisez. Si vous obtenez une erreur dâimage corrompue (corrupt image
) lorsque vous téléversez une image, cela signifie généralement que Pillow ne prend pas en charge son format. Pour corriger cela, installez la bibliothÚque correspondante et réinstallez Pillow.Lorsque vous utilisez un champ
ImageField
dans un formulaire, vous ne devez pas oublier de lier les donnĂ©es de fichier au formulaire.AprĂšs que le champ a Ă©tĂ© nettoyĂ© et validĂ©, lâobjet
UploadedFile
comportera un attribut supplémentaireimage
contenant lâinstance Image de Pillow utilisĂ©e pour contrĂŽler que le fichier est une image valide. Pillow ferme le descripteur de fichier sous-jacent aprĂšs avoir vĂ©rifiĂ© lâimage ; ainsi, alors que certains attributs de donnĂ©es non image tels queformat
,height
etwidth
sont accessibles, ce nâest pas le cas des mĂ©thodes qui accĂšdent aux donnĂ©es image sous-jacentes, telles quegetdata()
ougetpixel()
, sauf si vous prenez la peine de réouvrir le fichier. Par exemple>>> from PIL import Image >>> from django import forms >>> from django.core.files.uploadedfile import SimpleUploadedFile >>> class ImageForm(forms.Form): ... img = forms.ImageField() >>> file_data = {'img': SimpleUploadedFile('test.png', <file data>)} >>> form = ImageForm({}, file_data) # Pillow closes the underlying file descriptor. >>> form.is_valid() True >>> image_field = form.cleaned_data['img'] >>> image_field.image <PIL.PngImagePlugin.PngImageFile image mode=RGBA size=191x287 at 0x7F5985045C18> >>> image_field.image.width 191 >>> image_field.image.height 287 >>> image_field.image.format 'PNG' >>> image_field.image.getdata() # Raises AttributeError: 'NoneType' object has no attribute 'seek'. >>> image = Image.open(image_field) >>> image.getdata() <ImagingCore object at 0x7f5984f874b0>
De plus,
UploadedFile.content_type
sera Ă©galement mis Ă jour avec le type de contenu de lâimage pour autant que Pillow puisse le dĂ©terminer, sinon il prend la valeurNone
.- Composant par défaut :
IntegerField
¶
-
class
IntegerField
(**kwargs)¶ - Composant par défaut :
NumberInput
lorsqueField.localize
vautFalse
, sinonTextInput
. - Valeur vide :
None
- Est normalisé en : un nombre entier Python.
- Valide que la valeur donnée est un nombre entier. Utilise
MaxValueValidator
etMinValueValidator
simax_value
etmin_value
sont fournis. Les espaces de début et de fin sont permis, comme pour la fonctionint()
de Python. - ClĂ©s de messages dâerreur :
required
,invalid
,max_value
,min_value
Les messages dâerreur
max_value
etmin_value
peuvent contenir%(limit_value)s
, qui sera remplacé par la limite concernée.Accepte deux paramÚtres facultatifs liés à la validation :
-
max_value
¶
-
min_value
¶ Ces paramĂštres contrĂŽlent lâintervalle des valeurs autorisĂ©es dans ce champ.
- Composant par défaut :
JSONField
¶
-
class
JSONField
(encoder=None, decoder=None, **kwargs)¶ - New in Django 3.1.
Un champ qui accepte des données codées en JSON pour un champ
JSONField
.- Composant par défaut :
Textarea
- Valeur vide :
None
- Est normalisé en : une représentation Python de la valeur JSON (habituellement une valeur
dict
,list
ouNone
), en fonction deJSONField.decoder
. - Valide que la valeur donnée est une structure JSON valide.
- ClĂ©s de messages dâerreur :
required
,invalid
Accepte deux paramĂštres facultatifs :
-
encoder
¶ Une sous-classe de py:class:json.JSONEncoder pour sérialiser les types de données non prises en charge par le sérialiseur JSON standard (par ex.
datetime.datetime
ouUUID
). Par exemple, vous pouvez utiliser la classeDjangoJSONEncoder
.Contient
json.JSONEncoder
par défaut.
-
decoder
¶ Une sous-classe de
json.JSONDecoder
pour dĂ©sĂ©rialiser lâentrĂ©e. La dĂ©sĂ©rialisation pourrait devoir tenir compte de lâincertitude liĂ©e au type de la valeur dâentrĂ©e. Par exemple, vous courez le risque de renvoyer un objetdatetime
qui Ă©tait en fait une chaĂźne qui Ă©tait fortuitement au mĂȘme format que celui choisi pour les objetsdatetime
.Le
decoder
peut ĂȘtre utiliser pour valider les donnĂ©es entrĂ©es. Sijson.JSONDecodeError
est générée durant la désérialisation, une exceptionValidationError
sera produite.Contient
json.JSONDecoder
par défaut.
Note
Si vous utilisez un formulaire
ModelForm
, ce sont les paramĂštresencoder
etdecoder
deJSONField
qui seront utilisés.Formulaires conviviaux
JSONField
nâest pas particuliĂšrement convivial dans la plupart des cas. Il sâagit cependant dâune maniĂšre utile de mettre en forme des donnĂ©es dâun composant cĂŽtĂ© client en vue de son envoi vers le serveur. - Composant par dĂ©faut :
GenericIPAddressField
¶
-
class
GenericIPAddressField
(**kwargs)¶ Un champ contenant soit une adresse IPv4, soit une adresse IPv6.
- Composant par défaut :
TextInput
- Valeur vide :
''
(une chaßne vide) - Est normalisé en : une chaßne. Les adresses IPv6 sont normalisées selon la description ci-dessous.
- Valide que la valeur donnée est une adresse IP valide.
- ClĂ©s de messages dâerreur :
required
,invalid
La normalisation dâadresse IPv6 respecte la section 2.2 de la RFC 4291#section-2.2, y compris lâutilisation du format IPv4 suggĂ©rĂ© dans le 3e paragraphe de cette section, comme
::ffff:192.0.2.0
. Par exemple,2001:0::0:01
sera normalisé en2001::1
et::ffff:0a0a:0a0a
en::ffff:10.10.10.10
. Tous les caractĂšres sont convertis en minuscules.Accepte deux paramĂštres facultatifs :
-
protocol
¶ Limite la validité des saisies au protocole indiqué. Les valeurs possibles sont
'both'
(les deux protocoles acceptés, valeur par défaut),'IPv4'
ou'IPv6'
. La correspondance nâest pas sensible Ă la casse.
-
unpack_ipv4
¶ Décode les adresses IPv4 mappées comme
::ffff:192.0.2.1
. Si cette option est activée, cette adresse serait décodée en192.0.2.1
. Lâoption est dĂ©sactivĂ©e par dĂ©faut. Utilisable uniquement quandprotocol
est dĂ©fini Ă'both'
.
- Composant par défaut :
MultipleChoiceField
¶
-
class
MultipleChoiceField
(**kwargs)¶ - Composant par défaut :
SelectMultiple
- Valeur vide :
[]
(une liste vide) - Est normalisé en : une liste de chaßnes.
- Valide que chaque valeur dans la liste donnée existe dans la liste à choix.
- ClĂ©s de messages dâerreur :
required
,invalid_choice
,invalid_list
Le message dâerreur
invalid_choice
peut contenir%(value)s
, qui sera remplacé par le choix sélectionné.Requiert un paramÚtre supplémentaire obligatoire,
choices
, comme pourChoiceField
.- Composant par défaut :
TypedMultipleChoiceField
¶
-
class
TypedMultipleChoiceField
(**kwargs)¶ Similaire Ă
MultipleChoiceField
, sauf queTypedMultipleChoiceField
accepte deux paramÚtres supplémentaires,coerce
etempty_value
.- Composant par défaut :
SelectMultiple
- Valeur vide : ce qui a été indiqué dans
empty_value
- Est normalisé en : une liste de valeurs du type indiqué par le paramÚtre
coerce
. - Valide que les valeurs donnĂ©es existent dans la liste Ă choix et quâelles peuvent ĂȘtre transformĂ©es dans le bon type.
- ClĂ©s de messages dâerreur :
required
,invalid_choice
Le message dâerreur
invalid_choice
peut contenir%(value)s
, qui sera remplacé par le choix sélectionné.Accepte deux paramÚtres supplémentaires,
coerce
etempty_value
, comme pourTypedChoiceField
.- Composant par défaut :
NullBooleanField
¶
-
class
NullBooleanField
(**kwargs)¶ - Composant par défaut :
NullBooleanSelect
- Valeur vide :
None
- Est normalisé en : une valeur Python
True
,False
ouNone
. - Ne valide rien (câest-Ă -dire quâil nây a jamais dâexception
ValidationError
).
NullBooleanField
peut ĂȘtre utilisĂ© avec des composants tels queSelect
ouRadioSelect
en indiquant les choixchoices
du composantNullBooleanField( widget=Select( choices=[ ('', 'Unknown'), (True, 'Yes'), (False, 'No'), ] ) )
- Composant par défaut :
RegexField
¶
-
class
RegexField
(**kwargs)¶ - Composant par défaut :
TextInput
- Valeur vide : ce qui a été indiqué dans
empty_value
. - Est normalisé en : une chaßne.
- Utilise
RegexValidator
pour valider que la valeur donnĂ©e correspond Ă une certaine expression rĂ©guliĂšre. - ClĂ©s de messages dâerreur :
required
,invalid
Requiert un paramÚtre supplémentaire obligatoire :
-
regex
¶ Une expression rĂ©guliĂšre exprimĂ©e sous forme de chaĂźne ou dâobjet expression rĂ©guliĂšre compilĂ©e.
Accepte également
max_length
,min_length
,strip
etempty_value
, qui fonctionnent exactement comme pourCharField
.-
strip
¶ Contient
False
par dĂ©faut. Quand ce paramĂštre est activĂ©, lâĂ©puration des espaces initiales et finales sâeffectue avant la validation par lâexpression rĂ©guliĂšre.
- Composant par défaut :
SlugField
¶
-
class
SlugField
(**kwargs)¶ - Composant par défaut :
TextInput
- Valeur vide : ce qui a été indiqué dans
empty_value
. - Est normalisé en : une chaßne.
- Utilise
validate_slug
ouvalidate_unicode_slug
pour valider que la valeur donnĂ©e ne contient que des lettres, des nombres, des soulignements et des tirets. - ClĂ©s de messages dâerreur :
required
,invalid
Ce champ est prĂ©vu pour lâaffichage des champs de modĂšle
SlugField
dans les formulaires.Accepte deux paramĂštres facultatifs :
-
allow_unicode
¶ Une valeur boolĂ©enne indiquant au champ dâaccepter des lettres Unicode en plus des lettres ASCII de base. La valeur par dĂ©faut est
False
.
-
empty_value
¶ La valeur à utiliser pour représenter une valeur vide. Contient une chaßne vide par défaut.
- Composant par défaut :
TimeField
¶
-
class
TimeField
(**kwargs)¶ - Composant par défaut :
TimeInput
- Valeur vide :
None
- Est normalisé en : un objet Python
datetime.time
. - Valide que la valeur donnée est un objet
datetime.time
ou une chaĂźne mise en forme dans un format dâheure particulier. - ClĂ©s de messages dâerreur :
required
,invalid
Accepte un paramĂštre facultatif :
-
input_formats
¶ Une liste de chaßnes de format utilisées pour essayer de convertir une chaßne en un objet
datetime.time
valide.
Si aucun paramĂštre
input_formats
nâest indiquĂ©, les formats dâentrĂ©e par dĂ©faut sont lus dans dansTIME_INPUT_FORMATS
siUSE_L10N
estFalse
, ou dans la cléTIME_INPUT_FORMATS
de la langue active si la régionalisation est activée. Voir aussi la régionalisation des formats.- Composant par défaut :
URLField
¶
-
class
URLField
(**kwargs)¶ - Composant par défaut :
URLInput
- Valeur vide : ce qui a été indiqué dans
empty_value
. - Est normalisé en : une chaßne.
- Utilise
URLValidator
pour valider que la valeur donnĂ©e est une URL valide. - ClĂ©s de messages dâerreur :
required
,invalid
PossĂšde trois paramĂštres facultatifs
max_length
,min_length
etempty_value
, qui fonctionnent exactement comme pourCharField
.- Composant par défaut :
Classes de champs Field
intégrées plus complexes¶
ComboField
¶
-
class
ComboField
(**kwargs)¶ - Composant par défaut :
TextInput
- Valeur vide :
''
(une chaßne vide) - Est normalisé en : une chaßne.
- Valide que la valeur donnée est valide pour chacun des champs indiqués en paramÚtre de
ComboField
. - ClĂ©s de messages dâerreur :
required
,invalid
Requiert un paramÚtre supplémentaire obligatoire :
-
fields
¶ La liste des champs devant ĂȘtre utilisĂ©s pour valider la valeur du champ (dans lâordre de leur prĂ©sentation).
>>> from django.forms import ComboField >>> f = ComboField(fields=[CharField(max_length=20), EmailField()]) >>> f.clean('test@example.com') 'test@example.com' >>> f.clean('longemailaddress@example.com') Traceback (most recent call last): ... ValidationError: ['Ensure this value has at most 20 characters (it has 28).']
- Composant par défaut :
MultiValueField
¶
-
class
MultiValueField
(fields=(), **kwargs)¶ - Composant par défaut :
TextInput
- Valeur vide :
''
(une chaßne vide) - Est normalisé en : le type renvoyé par la méthode
compress
de la sous-classe. - Valide que les valeurs données sont valides pour chacun des champs indiqués en paramÚtre de
MultiValueField
. - ClĂ©s de messages dâerreur :
required
,invalid
,incomplete
AgrĂšge la logique de plusieurs champs qui produisent une seule valeur en commun.
Ce champ est abstrait et doit ĂȘtre hĂ©ritĂ©. Au contraire des champs Ă valeur unique, les sous-classes de
MultiValueField
ne doivent pas implémenterclean()
mais plutĂŽtcompress()
.Requiert un paramÚtre supplémentaire obligatoire :
-
fields
¶ Un tuple de champs dont les valeurs sont nettoyées puis ultérieurement combinées en une seule valeur. Chaque valeur du champ est nettoyée par le champ correspondant dans
fields
â la premiĂšre valeur est nettoyĂ©e par le premier champ, la deuxiĂšme valeur par le deuxiĂšme champ, etc. Lorsque tous les champs ont Ă©tĂ© nettoyĂ©s, la liste de ces valeurs est combinĂ©e en une valeur unique parcompress()
.
Accepte aussi des paramĂštre facultatifs :
-
require_all_fields
¶ La valeur par défaut est
True
, auquel cas une erreur de validationrequired
est gĂ©nĂ©rĂ©e si aucune valeur nâest fournie pour aucun champ.Lorsque la valeur est
False
, lâattributField.required
peut ĂȘtre dĂ©fini ĂFalse
pour des champs individuels pour les rendre facultatifs. Si aucune valeur nâest fournie pour un champ obligatoire, une erreur de validationincomplete
est gĂ©nĂ©rĂ©e.Un message dâerreur
incomplete
par dĂ©faut peut ĂȘtre dĂ©fini dans la sous-classe deMultiValueField
, ou il est possible de définir des messages différents pour chaque champ individuellement. Par exemple :from django.core.validators import RegexValidator class PhoneField(MultiValueField): def __init__(self, **kwargs): # Define one message for all fields. error_messages = { 'incomplete': 'Enter a country calling code and a phone number.', } # Or define a different message for each field. fields = ( CharField( error_messages={'incomplete': 'Enter a country calling code.'}, validators=[ RegexValidator(r'^[0-9]+$', 'Enter a valid country calling code.'), ], ), CharField( error_messages={'incomplete': 'Enter a phone number.'}, validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid phone number.')], ), CharField( validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid extension.')], required=False, ), ) super().__init__( error_messages=error_messages, fields=fields, require_all_fields=False, **kwargs )
-
widget
¶ Doit ĂȘtre une sous-classe de
django.forms.MultiWidget
. La valeur par défaut estTextInput
, qui nâest probablement pas trĂšs utile dans ce cas.
-
compress
(data_list)¶ Accepte une liste de valeurs valides et renvoie une version « compressée » de ces valeurs dans une seule valeur. Par exemple,
SplitDateTimeField
est une sous-classe qui combine un champ heure et un champ date en un seul objetdatetime
.Cette mĂ©thode doit ĂȘtre implĂ©mentĂ©e par les sous-classes.
- Composant par défaut :
SplitDateTimeField
¶
-
class
SplitDateTimeField
(**kwargs)¶ - Composant par défaut :
SplitDateTimeWidget
- Valeur vide :
None
- Est normalisé en : un objet Python
datetime.datetime
. - Valide que la valeur donnée est un objet
datetime.datetime
ou une chaĂźne mise en forme dans un format de date/heure particulier. - ClĂ©s de messages dâerreur :
required
,invalid
,invalid_date
,invalid_time
Accepte deux paramĂštres facultatifs :
-
input_date_formats
¶ Une liste de chaßnes de format utilisées pour essayer de convertir une chaßne en un objet
datetime.date
valide.
Si aucun paramĂštre
input_date_formats
nâest indiquĂ©, ce sont les formats de saisie par dĂ©faut deDateField
qui sont utilisés.-
input_time_formats
¶ Une liste de chaßnes de format utilisées pour essayer de convertir une chaßne en un objet
datetime.time
valide.
Si aucun paramĂštre
input_time_formats
nâest indiquĂ©, ce sont les formats de saisie par dĂ©faut deTimeField
qui sont utilisés.- Composant par défaut :
Champs dédiés aux relations¶
Deux champs sont disponibles pour représenter les relations entre modÚles : ModelChoiceField
and ModelMultipleChoiceField
. Ces deux champs exigent un seul paramĂštre queryset
utilisé pour créer les choix du champ. Lors de la validation du formulaire, ces champs placent soit un objet de modÚle (dans le cas de ModelChoiceField
), soit plusieurs objets de modĂšle (dans le cas de ModelMultipleChoiceField
) dans le dictionnaire cleaned_data
du formulaire.
Pour des usages plus complexes, il est possible dâindiquer queryset=None
au moment de déclarer le champ de formulaire, puis de remplir queryset
dans la méthode __init__()
du formulaire :
class FooMultipleChoiceForm(forms.Form):
foo_select = forms.ModelMultipleChoiceField(queryset=None)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['foo_select'].queryset = ...
ModelChoiceField
et ModelMultipleChoiceField
ont les deux un attribut iterator
qui spĂ©cifie la classe utilisĂ©e pour itĂ©rer sur le jeu de requĂȘte lors de la gĂ©nĂ©ration des choix. Voir ItĂ©ration sur les choix relationnels pour plus de dĂ©tails.
ModelChoiceField
¶
-
class
ModelChoiceField
(**kwargs)¶ - Composant par défaut :
Select
- Valeur vide :
None
- Est normalisé en : une instance de modÚle.
- Valide que lâidentifiant donnĂ© existe dans le jeu de requĂȘte.
- ClĂ©s de messages dâerreur :
required
,invalid_choice
Permet de sĂ©lectionner un seul objet de modĂšle, adaptĂ© Ă la reprĂ©sentation dâune clĂ© Ă©trangĂšre. Notez que le composant par dĂ©faut de
ModelChoiceField
devient difficilement utilisable au fur et Ă mesure que le nombre de choix possibles augmente. Il nâest pas recommandĂ© de lâutiliser lorsque le nombre dâĂ©lĂ©ments Ă choix dĂ©passe 100.Un seul paramĂštre est obligatoire :
-
queryset
¶ Un jeu de requĂȘte
QuerySet
dâobjets de modĂšles constituant la source des choix possibles pour le champ et qui est utilisĂ© aussi pour valider le choix de lâutilisateur. Il est Ă©valuĂ© au moment du rendu du formulaire.
ModelChoiceField
accepte aussi deux paramĂštres facultatifs :-
empty_label
¶ Par défaut, le composant
<select>
utilisé parModelChoiceField
comportera un choix vide en premier dans la liste. Vous pouvez adapter le texte de cette étiquette (qui est"---------"
par dĂ©faut) au moyen de lâattributempty_label
, ou mĂȘme dĂ©sactiver complĂštement le choix vide en dĂ©finissantempty_label
ĂNone
:# A custom empty label field1 = forms.ModelChoiceField(queryset=..., empty_label="(Nothing)") # No empty label field2 = forms.ModelChoiceField(queryset=..., empty_label=None)
Notez que si un
ModelChoiceField
est obligatoire et quâil contient une valeur initiale par dĂ©faut, aucun choix vide nâest créé (quelle que soit la valeur deempty_label
).
-
to_field_name
¶ Ce paramĂštre facultatif est utilisĂ© pour dĂ©signer le champ Ă utiliser comme valeur des choix dans le composant du champ. ContrĂŽlez quâil sâagit bien dâun champ unique du modĂšle, sinon la valeur sĂ©lectionnĂ©e pourrait correspondre Ă plus dâun objet. Par dĂ©faut ce paramĂštre vaut
None
, ce qui signifie que câest la clĂ© primaire de chaque objet qui est utilisĂ©e. Par exemple :# No custom to_field_name field1 = forms.ModelChoiceField(queryset=...)
produirait :
<select id="id_field1" name="field1"> <option value="obj1.pk">Object1</option> <option value="obj2.pk">Object2</option> ... </select>
et :
# to_field_name provided field2 = forms.ModelChoiceField(queryset=..., to_field_name="name")
produirait :
<select id="id_field2" name="field2"> <option value="obj1.name">Object1</option> <option value="obj2.name">Object2</option> ... </select>
ModelChoiceField
possÚde également cet attribut :-
iterator
¶ La classe dâitĂ©ration utilisĂ©e pour gĂ©nĂ©rer les choix du champ Ă partir de
queryset
. Par défaut,ModelChoiceIterator
.
La méthode
__str__()
du modÚle sera appelée pour générer les représentations textuelles des objets à faire figurer dans les choix du champ. Pour fournir des représentations personnalisées, créez une sous-classe deModelChoiceField
et surchargezlabel_from_instance
. Cette mĂ©thode reçoit un objet de modĂšle et doit renvoyer une chaĂźne reprĂ©sentative de lâobjet. Par exemple :from django.forms import ModelChoiceField class MyModelChoiceField(ModelChoiceField): def label_from_instance(self, obj): return "My Object #%i" % obj.id
- Composant par défaut :
ModelMultipleChoiceField
¶
-
class
ModelMultipleChoiceField
(**kwargs)¶ - Composant par défaut :
SelectMultiple
- Empty value: An empty
QuerySet
(self.queryset.none()
) - Est normalisé en : un
QuerySet
dâinstances de modĂšles. - Valide que chaque identifiant dans la liste donnĂ©e existe dans le jeu de requĂȘte.
- ClĂ©s de messages dâerreur :
required
,invalid_list
,invalid_choice
,invalid_pk_value
Le message dâerreur
invalid_choice
peut contenir%(value)s
et le messageinvalid_pk_value
peut contenir%(pk)s
, qui seront substituĂ©s par les valeurs appropriĂ©es.Permet la sĂ©lection dâun ou de plusieurs objets de modĂšles, adaptĂ© Ă la reprĂ©sentation de relations plusieurs-Ă -plusieurs. Comme pour
ModelChoiceField
, vous pouvez utiliserlabel_from_instance
afin de personnaliser les représentations des objets.Un seul paramÚtre est obligatoire :
-
queryset
¶ Identique Ă
ModelChoiceField.queryset
.
Accepte un paramĂštre facultatif :
-
to_field_name
¶ Identique Ă
ModelChoiceField.to_field_name
.
ModelMultipleChoiceField
possÚde également cet attribut :-
iterator
¶ Identique Ă
ModelChoiceField.iterator
.
- Composant par défaut :
ObsolĂšte depuis la version 3.1: Le message list
est osbolÚte, il a été remplacé par invalid_list
.
Itération sur les choix relationnels¶
Par défaut, ModelChoiceField
et ModelMultipleChoiceField
utilisent ModelChoiceIterator
pour générer leur choix de champ choices
.
Lors de son itération, ModelChoiceIterator
produit des choix de tuples à 2 éléments contenant des instances ModelChoiceIteratorValue
comme premier élément value
dans chaque choix. ModelChoiceIteratorValue
enveloppe la valeur du choix tout en maintenant une rĂ©fĂ©rence Ă lâinstance de modĂšle source pouvant ĂȘtre utilisĂ©e par exemple dans des implĂ©mentations de composants personnalisĂ©s pour ajouter des attributs data-* aux Ă©lĂ©ments <option>
.
Par exemple, considérons les modÚles suivants :
from django.db import models
class Topping(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, max_digits=6)
def __str__(self):
return self.name
class Pizza(models.Model):
topping = models.ForeignKey(Topping, on_delete=models.CASCADE)
Vous pouvez utiliser une sous-classe de composant Select
pour inclure la valeur de Topping.price
sous forme dâattribut HTML data-price
pour chaque élément <option>
:
from django import forms
class ToppingSelect(forms.Select):
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
option = super().create_option(name, value, label, selected, index, subindex, attrs)
if value:
option['attrs']['data-price'] = value.instance.price
return option
class PizzaForm(forms.ModelForm):
class Meta:
model = Pizza
fields = ['topping']
widgets = {'topping': ToppingSelect}
Cela produira lâĂ©lĂ©ment select pour Pizza.topping
ainsi :
<select id="id_topping" name="topping" required>
<option value="" selected>---------</option>
<option value="1" data-price="1.50">mushrooms</option>
<option value="2" data-price="1.25">onions</option>
<option value="3" data-price="1.75">peppers</option>
<option value="4" data-price="2.00">pineapple</option>
</select>
Pour des usages plus avancés, vous pouvez créer des sous-classes de ModelChoiceIterator
afin de personnaliser les choix de tuples à 2 éléments qui sont produits.
ModelChoiceIterator
¶
-
class
ModelChoiceIterator
(field)¶ La classes par dĂ©faut attribuĂ©e Ă lâattribut
iterator
des champsModelChoiceField
etModelMultipleChoiceField
. Un objet itĂ©rable produisant des choix de tuples Ă 2 Ă©lĂ©ments Ă partir du jeu de requĂȘte.Un seul paramĂštre est obligatoire :
-
field
¶ Lâinstance
ModelChoiceField
ouModelMultipleChoiceField
sur laquelle itérer et qui produira les choix.
ModelChoiceIterator
possÚde la méthode suivante :-
__iter__
()¶ Produit des choix de tuples à 2 éléments, au format
(value, label)
utilisé parChoiceField.choices
. Le premier élémentvalue
est une instanceModelChoiceIteratorValue
.Changed in Django 3.1:Dans les anciennes versions, le premier élément
value
dans le tuple de choix Ă©tait la valeur du champ elle-mĂȘme au lieu dâune instanceModelChoiceIteratorValue
. Dans la plupart de cas, la substitution se fait de maniĂšre transparente, mais si vous avez besoin de la valeur defield
elle-mĂȘme, utilisez plutĂŽt lâattributModelChoiceIteratorValue.value
.
-
ModelChoiceIteratorValue
¶
-
class
ModelChoiceIteratorValue
(value, instance)¶ - New in Django 3.1.
Deux paramĂštres sont obligatoires :
-
value
¶ La valeur du choix. Cette valeur est utilisĂ©e pour produire lâattribut
value
dâun Ă©lĂ©ment HTML<option>
.
-
instance
¶ Lâinstance de modĂšle provenant du jeu de requĂȘte. On peut accĂ©der Ă cette instance dans des implĂ©mentations personnalisĂ©es de
ChoiceWidget.create_option()
pour ajuster le code HTML produit.
ModelChoiceIteratorValue
possÚde la méthode suivante :-
__str__
()¶ Renvoie
value
comme chaĂźne qui sera produite en HTML.
-
Création de champs personnalisés¶
Si les classes Field
intégrées ne correspondent pas à vos besoins, vous pouvez créer des classes Field
personnalisées. Pour cela, créez une sous-classe de django.forms.Field
. Les seules exigences sont que la méthode clean()
doit ĂȘtre implĂ©mentĂ©e et que la mĂ©thode __init__()
accepte les paramÚtres de base mentionnés plus haut (required
, label
, initial
, widget
, help_text
).
Il est aussi possible de personnaliser la maniÚre dont un champ est accédé en surchargeant get_bound_field()
.