root/docs/trunk/model-api.txt

Revision 108, 75.4 kB (checked in by anhj, 2 years ago)

relecture, correction de typos, orthographe etc.

<
Line 
1 =================================
2 Document de référence des modÚles
3 =================================
4
5 Un modÚle est une description unique et définitive de vos données. Il contient
6 les champs et comportements essentiels des données que vous stockez.
7 Généralement, chaque modÚle correspond à une seule table de base de données.
8
9 Les bases:
10
11     * Chaque modÚle est une classe Python qui étend ``django.db.models.Model``.
12     * Chaque attribut du modÚle représente un champ de base de données.
13     * Les méta-données du modÚle (informations n'étant pas des champs) vont dans
14       une classe interne nommée ``Meta``.
15     * Les méta-données utilisées pour le site d'administration de Django vont
16       dans une classe interne nommée ``Admin``.
17     * Avec tout cela, Django vous donne une API d'accÚs à la base de données
18       générée automatiquement, qui est décrite dans la `Documentation de
19       référence pour l'API de base de données`_.
20
21 Pour accompagner ce document, n'hésitez pas à jeter un œil au `dépÃŽt officiel
22 des exemples de modÚle`_.
23 (Dans le paquetage des sources de Django, ces exemples sont dans le répertoire
24 ``tests/modeltests``.)
25
26 .. _Documentation de référence pour l'API de base de données:
27    ../db_api/
28 .. _dépÎt officiel des exemples de modÚle:
29    ../models/
30
31 Exemple rapide
32 ==============
33
34 Ce modÚle d'exemple définit une ``Personne``, qui possÚde un ``prenom`` et un
35 ``nom``::
36
37     from django.db import models
38
39     class Personne(models.Model):
40         prenom = models.CharField(maxlength=30)
41         nom = models.CharField(maxlength=30)
42
43 ``prenom`` et ``nom`` sont des *champs* du modÚle. Chaque champ est déclaré
44 comme un attribut de classe, et chaque attribut correspond à une colonne de base
45 de données.
46
47 Le modÚle ``Personne`` ci-dessus créerait une table de base de données comme
48 celle-ci::
49
50     CREATE TABLE monappli_personne (
51         "id" serial NOT NULL PRIMARY KEY,
52         "prenom" varchar(30) NOT NULL,
53         "nom" varchar(30) NOT NULL
54     );
55
56 Quelques notes techniques:
57
58     * Le nom de la table, ``monappli_personne``, est automatiquement dérivé de
59       quelques méta-données du modÚle mais peut être personnalisé. Lisez _`Noms
60       de table` un peu plus bas.
61     * Un champ ``id`` est ajouté automatiquement, mais ce comportement peut être
62       modifié. Lisez `Les champs de clé primaire automatiques`_ plus bas.
63     * Le code SQL ``CREATE TABLE`` de cet exemple est formaté en utilisant la
64       syntaxe de PostgreSQL, mais il est bon de noter que Django adapte son code
65       SQL au backend de la base de données spécifiée dans votre `fichier de
66       configuration`_.
67
68 .. _fichier de configuration:
69    ../settings/
70
71 Les champs
72 ==========
73
74 La partie la plus importante d'un modÚle -- et la seule partie requise d'un
75 modÚle -- est la liste des champs de base de données qu'il définit. Les champs
76 sont définis par attributs de classe.
77
78 Par exemple::
79
80     class Musicien(models.Model):
81         prenom = models.CharField(maxlength=50)
82         nom = models.CharField(maxlength=50)
83         instrument = models.CharField(maxlength=100)
84
85     class Album(models.Model):
86         artiste = models.ForeignKey(Musicien)
87         nom = models.CharField(maxlength=100)
88         date_de_sortie = models.DateField()
89         nb_etoiles = models.IntegerField()
90
91 Restrictions des noms de champ
92 ------------------------------
93
94 Django place seulement deux restrictions sur les noms de champs d'un modÚle:
95
96     1. Un nom de champ ne peut pas être un mot réservé du langage Python, parce
97        que cela produirait une erreur de syntaxe Python. Par exemple::
98
99            class Exemple(models.Model):
100                pass = models.IntegerField() # 'pass' est un mot réservé !
101
102     2. Un nom de champ ne peut pas contenir plusieurs underscores consécutifs, à
103        cause de la maniÚre dont fonctionne la syntaxe de requête de recherche
104        dans Django. Par exemple::
105
106            class Exemple(models.Model):
107                foo__bar = models.IntegerField() 'foo__bar' a deux underscores !
108
109 Ces limitations peuvent être contournées car votre nom de champ de doit pas
110 nécessairement correspondre au nom de colonne de votre base de données. Lisez
111 `db_column`_ plus bas.
112
113 Les mots réservés du SQL, tels que ``join``, ``where`` ou ``select``, *sont*
114 permis comme noms de champ du modÚle, parce que Django échappe tous les noms de
115 table et colonne de base de données dans toutes les requêtes en SQL. Il utilise
116 la syntaxe entre guillemets adaptée à votre moteur de base de données.
117
118 Les types de champ
119 ------------------
120
121 Chaque champ de votre modÚle devrait être une instance de la classe ``Field``
122 appropriée. Django utilise les types de classe de champs pour déterminer
123 quelques points:
124
125     * Le type de la colonne de base de données (par exemple, ``INTEGER``,
126       ``VARCHAR``).
127     * Le widget à utiliser dans l'interface d'administration de Django, si vous
128       envisagez de l'utiliser (par exemple, ``<input type="text">``, ``<select>``).
129     * La validation minimale des données saisies dans le site d'admin de Django
130       et dans les manipulateurs.
131
132 Voici tout les types de champs disponibles:
133
134 ``AutoField``
135 ~~~~~~~~~~~~~
136
137 C'est un ``IntegerField`` qui s'incrémente automatiquement selon les IDs
138 disponibles. Vous aurez rarement à l'utiliser directement ; un champ de clé
139 primaire sera automatiquement ajouté à votre modÚle si vous ne spécifiez pas une
140 instruction contraire. Lisez les `Les champs de clé primaire automatiques`_.
141
142 ``BooleanField``
143 ~~~~~~~~~~~~~~~~
144
145 Un champs vrai/faux.
146
147 L'interface d'admin le représente par une boîte de choix (checkbox).
148
149 ``CharField``
150 ~~~~~~~~~~~~~
151
152 Un champ de chaîne de caractÚres, pour les chaînes courtes comme longues.
153
154 Pour les trÚs longues chaînes de texte, préférez plutÎt ``TextField``.
155
156 L'interface d'admin le représente par un ``<input type="text">`` (une entrée à
157 simple ligne).
158
159 ``CharField`` possÚde un argument supplémentaire requis, ``maxlength``, la
160 longueur maximale (en caractÚres) du champ. Le maxlength est imposé au niveau base de données et
161 est utilisé par Django pour la validation.
162
163 ``CommaSeparatedIntegerField``
164 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
165
166 Un champ de nombres entiers séparés par des virgules. Comme dans ``CharField``,
167 l'argument ``maxlength`` est requis.
168
169 ``DateField``
170 ~~~~~~~~~~~~~
171
172 Un champ de date. PossÚde quelques arguments supplémentaires facultatifs:
173
174     ======================  ===================================================
175     Argument                Description
176     ======================  ===================================================
177     ``auto_now``            Définit automatiquement le champ à la date courante
178                             à chaque fois que l'objet est enregistré. Utile
179                             pour les champs « derniÚre-modif ». Notez que la date
180                             actuelle est *toujours* utilisée ; ce n'est pas
181                             seulement une valeur par défaut que vous pourriez
182                             modifier.
183
184     ``auto_now_add``        Définit automatiquement le champ à la date courante
185                             quand l'objet est créé la premiÚre fois. Utile pour
186                             contenir les dates de création. Notez que la date
187                             actuelle est *toujours* utilisée ; ce n'est pas
188                             seulement une valeur par défaut que vous pourriez
189                             modifier.
190     ======================  ===================================================
191
192 L'interface d'admin le représente par un ``<input type="text">`` avec un
193 calendrier JavaScript et un raccourci pour « Aujourd'hui ».
194
195 ``DateTimeField``
196 ~~~~~~~~~~~~~~~~~
197
198 Un champ de date et heure. Prend les mêmes options supplémentaires que
199 ``DateField``.
200
201 L'interface d'admin le représente par deux champs ``<input type="text">``, avec
202 des raccourcis JavaScript.
203
204 ``EmailField``
205 ~~~~~~~~~~~~~~
206
207 Un ``CharField`` qui vérifie que la valeur est une adresse de courrier
208 électronique valide.
209 ``maxlength`` n'est pas accepté.
210
211 ``FileField``
212 ~~~~~~~~~~~~~
213
214 Un champ d'envoi de fichier.
215
216 PossÚde un argument supplémentaire obligatoire, ``upload_to``, définissant un
217 chemin local du systÚme de fichiers où les fichiers reçus devraient être
218 conservés. Ce chemin peut contenir du `formatage strftime (en)`_, qui sera
219 remplacé par la date et/ou l'heure où le fichier est reçu (ainsi ces fichiers
220 reçus ne remplissent pas un répertoire donné).
221
222 L'interface d'admin le représente par un ``<input type="file">`` (un widget
223 d'envoi de fichier).
224
225 Utiliser un ``FileField`` ou un ``ImageField`` (voir ci-dessous) dans un modÚle
226 requiert quelques étapes:
227
228     1. Dans votre fichier de configuration, vous aurez besoin de définir
229        ``MEDIA_ROOT`` avec le chemin absolu vers un répertoire où vous aimeriez
230        que Django stocke les fichiers reçus. (Pour des raisons de performance,
231        ces fichiers ne sont pas stockés dans la base de données.) Définissez
232        ``MEDIA_URL`` avec l'URL de base publique représentant ce répertoire.
233        Assurez-vous que ce répertoire a les droits en écriture pour le compte
234        utilisateur de celui qui lance le serveur Web.
235
236     2. Ajoutez le ``FileField`` ou le ``ImageField`` dans votre modÚle,
237        assurez-vous de définir l'option ``upload_to`` pour dire à Django dans quel
238        sous-répertoire de ``MEDIA_ROOT`` il devrait conserver les fichiers reçus.
239
240     3. Tout ce qui sera stocké dans la base de données sera un chemin vers le
241        fichier (relativement à ``MEDIA_ROOT``). Vous aurez certainement à
242        utiliser la fonction utilitaire ``get_<fieldname>_url`` fournie par
243        Django. Par exemple, si votre ``ImageField`` s'appelle ``mug_shot``,
244        vous pouvez obtenir l'URL absolue de votre image dans un template avec
245        ``{{ object.get_mug_shot_url }}``.
246
247 .. _`formatage strftime (en)`: http://docs.python.org/lib/module-time.html#l2h-1941
248
249 ``FilePathField``
250 ~~~~~~~~~~~~~~~~~
251
252 Un champ dont les choix sont limités aux noms de fichier d'un certain répertoire
253 du systÚme de fichiers. PossÚde trois arguments spéciaux, dont le premier est
254 requis:
255
256     ======================  ===================================================
257     Argument                Description
258     ======================  ===================================================
259     ``path``                Obligatoire. Le chemin absolu du systÚme de
260                             fichiers d'un répertoire dans lequel ce
261                             ``FilePathField`` est censé générer ses choix.
262                             Par exemple: ``"/home/images"``.
263
264     ``match``               Facultatif. Une expression rationnelle, sous forme
265                             de chaîne de caractÚres, que ``FilePathField``
266                             utilisera pour filtrer les noms de fichier. Notez
267                             que cette regex sera appliquée au nom de base du
268                             fichier, et non au chemin complet. Par exemple:
269                             ``"foo.*\.txt^"``, qui va garder un fichier nommé
270                             ``foo23.txt`` mais pas ``bar.txt`` ni
271                             ``foo23.gif``.
272
273     ``recursive``           Facultatif. Soit ``True``, soit ``False``.
274                             ``False`` par défaut. Spécifie si tous les
275                             sous-répertoires de ``path`` devraient être inclus.
276     ======================  ===================================================
277
278 Bien-sûr, ces trois arguments peuvent être utilisés ensemble.
279
280 Une grande source d'erreur potentielle vient du fait que ``match`` s'applique
281 sur le nom de base du fichier, et non sur le chemin complet. Donc, cet
282 exemple::
283
284     FilePathField(path="/home/images", match="foo.*", recursive=True)
285
286 ...va garder ``/home/images/foo.gif`` mais pas ``/home/images/foo/bar.gif``
287 parce que le ``match`` s'appliquera sur le nom de base du fichier (``foo.gif`` et
288 ``bar.gif``).
289
290 ``FloatField``
291 ~~~~~~~~~~~~~~
292
293 Un nombre à virgule flottante. PossÚde deux arguments **obligatoires**:
294
295     ======================  ===================================================
296     Argument                Description
297     ======================  ===================================================
298     ``max_digits``          Le nombre maximal de chiffres permis dans le
299                             nombre.
300
301     ``decimal_places``      Le nombre de décimales aprÚs la virgule pour
302                             stocker le nombre.
303     ======================  ===================================================
304
305 Par exemple, pour stocker des nombres jusqu'à 999 avec une résolution de 2
306 chiffres aprÚs la virgule, vous utiliseriez::
307
308     models.FloatField(..., max_digits=5, decimal_places=2)
309
310 Et poour stocker des nombres jusqu'à approximativement un milliard avec une
311 résolution de 10 chiffres aprÚs la virgule::
312
313     models.FloatField(..., max_digits=19, decimal_places=10)
314
315 L'interface d'admin le représente par un ``<input type="text">`` (une entrée à
316 une seule ligne).
317
318 ``ImageField``
319 ~~~~~~~~~~~~~~
320
321 Comme ``FileField``, mais contrÎle que l'objet reçu est une image valide.
322 PossÚde deux arguments supplémentaires facultatifs, ``height_field`` et
323 ``width_field``, qui, si définis, auto-redimensionneront à la largeur et hauteur
324 donnée l'image à chaque fois que l'intance de modÚle est sauvegardée.
325
326 Requiert la `BibliothÚque d'Imagerie Python - PIL (en)`_.
327
328 .. _BibliothÚque d'Imagerie Python - PIL (en): http://www.pythonware.com/products/pil/
329
330 ``IntegerField``
331 ~~~~~~~~~~~~~~~~
332
333 Un entier.
334
335 L'interface d'admin le représente par un ``<input type="text">`` (une entrée à
336 une seule ligne).
337
338 ``IPAddressField``
339 ~~~~~~~~~~~~~~~~~~
340
341 Une adresse IP, dans son format de chaîne de caractÚres (c'est-à-dire
342 "24.124.1.30").
343
344 L'interface d'admin le représente par un ``<input type="text">`` (une entrée à
345 une seule ligne).
346
347 ``NullBooleanField``
348 ~~~~~~~~~~~~~~~~~~~~
349
350 Comme un ``BooleanField``, sauf qu'il admet ``NULL`` comme un des choix.
351 Utilisez cela à la place d'un ``BooleanField`` avec ``null=True``.
352
353 L'interface d'admin le représente par une boîte ``<select>`` avec les choix
354 "Inconnu", "Oui" et "Non".
355
356 ``PasswordField``
357 ~~~~~~~~~~~~~~~~~ 
358
359 Un ``PasswordField`` est comme un ``TextField`` à part que les caractÚres entrés
360 sont masqués, typiquement par une astérisque (*), lorsqu'ils sont saisis dans un
361 formulaire. Notez que même si la donnée est masquée en entrée, elle est envoyée
362 en texte clair au serveur et stocké en plein texte dans la base de données. Des
363 mesures supplémentaires (telles que l'usage de HTTPS) sont nécessaires pour
364 assurer la sécurité des données envoyées depuis un formulaire. Ce champ est
365 probablement plus utile lorsqu'il est employé dans un `manipulateur personnalisé`_
366 et non directement dans un modÚle.
367
368 .. _manipulateur personnalisé: ../forms/#custom-forms-and-manipulators
369
370 ``PhoneNumberField``
371 ~~~~~~~~~~~~~~~~~~~~
372
373 Un ``CharField`` qui vérifie que la valeur est un numéro de téléphone américain
374 valide (au format ``XXX-XXX-XXXX``).
375
376 ``PositiveIntegerField``
377 ~~~~~~~~~~~~~~~~~~~~~~~~
378
379 Comme un ``IntegerField``, sauf qu'il doit être positif.
380
381 ``PositiveSmallIntegerField``
382 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
383
384 Comme un ``PositiveIntegerField``, à part qu'il admet seulement les valeurs
385 inférieures à une certaine limite (qui dépend de la base de données).
386
387 ``SlugField``
388 ~~~~~~~~~~~~~
389
390 « Slug » est un terme anglophone employé dans le jargon de la publication. Un
391 slug est un court libellé pour désigner quelque chose, contenant seulement des
392 lettres, des nombres, des underscores ou des traits d'union. Ils sont
393 généralement utilisés dans les URLs.
394
395 Dans la version en développement de Django, vous pouvez spécifier ``maxlength``.
396 Si ``maxlength`` n'est pas spécifié, Django utilisera une longueur par défaut de
397 50. Dans les versions précédentes de Django, il n'est pas possible de modifier la
398 longueur de 50.
399
400 Implique que ``db_index=True``.
401
402 Accepte une option supplémentaire, ``prepopulate_from``, qui est une liste de
403 champs depuis laquelle on peut auto-générer le slug, via JavaScript, dans le
404 formulaire de description d'un objet de l'interface d'admin::
405
406     models.SlugField(prepopulate_from=("prenom", "nom"))
407
408 ``prepopulate_from`` n'accepte pas les DateTimeFields.
409
410 L'interface d'admin représente un ``SlugField`` par un ``<input type="text">``
411 (une entrée à une seule ligne).
412
413 ``SmallIntegerField``
414 ~~~~~~~~~~~~~~~~~~~~~
415
416 Comme un ``IntegerField``, à part qu'il admet seulement les valeurs inférieures
417 à une certaine limite (qui dépend de la base de données).
418
419 ``TextField``
420 ~~~~~~~~~~~~~
421
422 Un champ de texte long.
423
424 L'interface d'admin le représente par un ``<textarea>`` (une entrée à lignes
425 multiples).
426
427 ``TimeField``
428 ~~~~~~~~~~~~~
429
430 Une heure. Accepte les mêmes options d'auto-définition que ``DateField`` et
431 ``DateTimeField``.
432
433 L'interface d'admin le représente par un ``<input type="text">`` avec quelques
434 raccourcis JavaScript.
435
436 ``URLField``
437 ~~~~~~~~~~~~
438
439 Un champ pour une URL. Si l'option ``verify_exists`` est à ``True`` (par défaut),
440 l'existence de l'URL donnée sera vérifiée (c'est-à-dire que l'URL charge et ne
441 renvoie pas une réponse 404).
442
443 L'interface d'admin le représente par un ``<input type="text">`` (une entrée à
444 une seule ligne).
445
446 ``USStateField``
447 ~~~~~~~~~~~~~~~~
448
449 Une abbréviation de deux lettres désignant un état américain.
450
451 L'interface d'admin le représente par un ``<input type="text">`` (une entrée
452 d'une seule ligne).
453
454 ``XMLField``
455 ~~~~~~~~~~~~
456
457 Un ``TextField`` qui vérifie que la valeur est du XML valide qui correspond au
458 schéma donné. Prend un argument obligatoire, ``schema_path``, qui est un chemin
459 du systÚme de fichier vers un schéma RelaxNG_ à partir duquel le champ sera
460 contrÎlé.
461
462 .. _RelaxNG: http://www.relaxng.org/
463
464 Les options de champ
465 --------------------
466
467 Les arguments suivants sont disponibles pour tous les types de champ. Ils sont
468 tous facultatifs.
469
470 ``null``
471 ~~~~~~~~
472
473 S'il est mis à ``True``, Django stockera les valeurs vides comme des ``NULL``
474 dans la base de données.
475 Par défaut, ``False``.
476
477 Notez que les valeurs de chaîne vide seront toujours stockées sous forme de
478 chaînes vides, et non en tant que ``NULL`` -- donc utilisez ``null=True`` pour
479 les champs qui ne sont pas des chaînes de caractÚres, tels que les entiers, les
480 booléens et les dates.
481
482 Inutile d'utiliser ``null`` sur les champs basés sur des chaînes de caractÚres,
483 tels que ``CharField`` et ``TextField``, sauf si vous avez une excellente
484 raison. Si un champ basé sur des chaînes de caractÚres possÚde l'option
485 ``null=True``, cela signifie qu'il y a deux valeurs possibles pour "pas de
486 données":
487 ``NULL``, et la chaîne vide. Dans la plupart des cas, il est redondant d'avoir
488 deux valeurs possibles pour "pas de donnée"; la convention adoptée par Django
489 est d'utiliser la chaîne vide plutÎt que ``NULL``.
490
491 ``blank``
492 ~~~~~~~~~
493
494 S'il est mis à ``True``, on permet que le champ soit vide.
495
496 Notez que celui-ci est différent de ``null``. ``null`` est purement lié à la
497 base de données, alors que ``blank`` est lié au contrÎle de la validité de la
498 saisie. Si un champ a l'option ``blank=True``, le systÚme de validation dans le
499 site d'admin de Django autorisera la saisie de valeur vide. Si un champ a l'option
500 ``blank=False``, le champ sera obligatoire.
501
502 ``choices``
503 ~~~~~~~~~~~
504
505 Une séquence itérable (par exemple, une liste ou un tuple) constitué de 2-tuples
506 qui seront utilisé comme liste à choix multiples pour ce champ.
507
508 Si cette option est donnée, l'interface d'admin de Django utilisera une boîte
509 de sélection au lieu du champ de texte standard et limitera les choix aux choix
510 donnés.
511
512 Une liste à choix multiples ressemble à ceci::
513
514     GRADES_ECOLE_SPORTIVE = (
515         ('PS', 'Poussin'),
516         ('MN', 'Minime'),
517         ('JR', 'Junior'),
518         ('SR', 'Sénior'),
519         ('VT', 'Vétéran'),
520     )
521
522 Le premier élément de chaque tuple est la valeur qui sera en fait stockée. Le
523 second élément est la définition qui sera affichée à l'utilisateur pour ce
524 choix-là.
525
526 Les listes à choix multiples peuvent être aussi bien définies à l'intérieur de
527 votre classe de modÚle::
528
529     class Toto(models.Model):
530         LISTE_GENRES = (
531             ('H', 'Homme'),
532             ('F', 'Femmme'),
533         )
534         genre = models.CharField(maxlength=1, choices=LISTE_GENRES)
535
536 Qu'à l'extérieur de votre classe de modÚle::
537
538     LISTE_GENRES = (
539         ('H', 'Homme'),
540         ('F', 'Femme'),
541     )
542     class Toto(models.Model):
543         genre = models.CharField(maxlength=1, choices=LISTE_GENRES)
544
545 Enfin, notez que ces choix peuvent être n'importe quel objet itérable -- pas
546 nécessairement une liste ou un tuple. Cela vous permet de construire des listes
547 à choix multiples dynamiquement. Mais si vous vous retrouvez à coder les objets
548 que vous passez dans ``choices`` pour être dynamique, il serait probablement
549 mieux que vous utilisiez une table de base de données à part avec une clé
550 étrangÚre ``ForeignKey``. ``choices`` est censé être utilisé pour de la donnée
551 statique qui ne change plus.
552
553 ``core``
554 ~~~~~~~~
555
556 Pour des objets qui sont édités à l'intérieur d'un objet lié.
557
558 Dans l'interface d'admin de Django, si tous les champs « core » dans un objet
559 édité imbriqué sont vides, alors cet objet est supprimé.
560
561 Une erreur est déclenchée si on a une relation d'édition imbriquée sans au moins
562 un champ ``core=True``.
563
564 Merci de noter que chaque champ marqué "core" est traité comme un champ requis
565 par le site d'admin de Django. En particulier, cela signifie que vous devriez
566 mettre ``core=True`` sur tout les champs obligatoire dans votre objet lié qui
567 est édité à l'intérieur d'un autre.
568
569 ``db_column``
570 ~~~~~~~~~~~~~
571
572 Le nom de la colonne de base de données à utiliser pour ce champ. S'il n'est pas
573 fourni, Django utilisera le nom du champ.
574
575 Si votre nom de colonne est un mot réservé du langage SQL, ou s'il contient des
576 caractÚres qui ne sont pas permis dans les noms de variable Python -- notamment,
577 le trait d'union -- c'est bon. Django met entre guillemets les noms de tables et
578 de colonnes de maniÚre transparente.
579
580 ``db_index``
581 ~~~~~~~~~~~~
582
583 S'il est mis à ``True``, ``django-admin.py sqlindexes`` affichera une
584 instruction ``CREATE INDEX``
585 pour ce champ.
586
587 ``default``
588 ~~~~~~~~~~~
589
590 La valeur par défaut du champ.
591
592 ``editable``
593 ~~~~~~~~~~~~
594
595 S'il est mis à ``False``, le champ ne sera pas éditable dans l'interface
596 d'admin. Par défaut, ``True``.
597
598 ``help_text``
599 ~~~~~~~~~~~~~
600
601 Un texte d'aide supplémentaire à afficher sous le champ dans le formulaire
602 d'édition d'un objet de l'interface d'admin. C'est utile pour la documentation,
603 même si votre objet n'a pas de formulaire d'administration.
604
605 ``primary_key``
606 ~~~~~~~~~~~~~~~
607
608 S'il est mis à ``True``, ce champ est la clé primaire du modÚle.
609
610 Si vous ne spécifiez ``primary_key=True`` pour aucun champ de votre modÚle,
611 Django ajoutera automatiquement ce champ::
612
613     id = models.AutoField('ID', primary_key=True)
614
615 Ainsi, vous n'avez pas besoin de définir ``primary_key=True`` sur l'un de vos
616 champs, sauf si voulez changer ce comportement par défaut de clé primaire.
617
618 ``primary_key=True`` implique ``blank=False``, ``null=False`` et
619 ``unique=True``. Seule une clé primaire est permise par objet.
620
621 ``radio_admin``
622 ~~~~~~~~~~~~~~~
623
624 Par défaut, l'interface d'admin de Django utilise la boîte de sélection
625 (<select>) pour les champs de clé étrangÚre ``ForeignKey`` ou qui ont l'option
626 ``choices`` définie. Si ``radio_admin`` est mis à ``True``, Django utilisera
627 des boutons radios à la place.
628
629 À ne pas utiliser pour les champs autres que ``ForeignKey`` ou ayant l'option
630 ``choices`` définie.
631
632 ``unique``
633 ~~~~~~~~~~
634
635 S'il est mis à ``True``, le champ devra être unique sur toute la table.
636
637 Ce contrÎle est effectué au niveau base de données, ainsi qu'au niveau des
638 formulaires d'administration de Django.
639
640 ``unique_for_date``
641 ~~~~~~~~~~~~~~~~~~~
642
643 Donnez-lui comme valeur le nom d'un ``DateField`` ou d'un ``DateTimeField`` pour
644 demander que ce champ soit unique en fonction de la valeur du champ de date.
645
646 Par exemple, si vous avez un champ  ``titre`` qui possÚde
647 ``unique_for_date="pub_date"``, alors Django n'autorisera pas la saisie de deux
648 enregistrements avec le même ``titre`` et ``pub_date``.
649
650 Ce contrÎle est effectué au niveau des formulaires d'administration de Django, mais
651 pas au niveau de la base de données.
652
653 ``unique_for_month``
654 ~~~~~~~~~~~~~~~~~~~~
655
656 Comme ``unique_for_date``, mais la contrainte d'unicité du champ se fait en
657 fonction du mois.
658
659 ``unique_for_year``
660 ~~~~~~~~~~~~~~~~~~~
661
662 Comme ``unique_for_date`` et ``unique_for_month``.
663
664 ``validator_list``
665 ~~~~~~~~~~~~~~~~~~
666
667 Une liste de validateurs supplémentaires à appliquer sur le champ. Chacuns
668 doivent être appelables (callable) en prenant les paramÚtres ``field_data, all_data``
669 et déclenchant ``django.core.validators.ValidationError`` en cas d'erreurs.
670 (Lisez la `documentation des validateurs`_.)
671
672 Django fournit quelques validateurs. Ils se trouvent dans
673 ``django.core.validators``.
674
675 .. _documentation des validateurs: ../forms/#validators
676
677 Noms de champs explicites
678 -------------------------
679
680 Chaque type de champ, excepté ``ForeignKey``, ``ManyToManyField`` et
681 ``OneToOneField``, prend un argument facultatif en premiÚre position -- un
682 nom explicite. Si le nom explicite n'est pas donné, Django le créera
683 automatiquement en utilisant le nom de l'attribut du champ, en convertissant les
684 underscores en espaces.
685
686 Dans cet exemple, le nom explicite est ``"Prénom de la personne"``::
687
688     prenom = models.CharField("Prénom de la personne", maxlength=30)
689
690 Dans cet exemple, le nom explicite est ``"prenom"``::
691
692     prenom = models.CharField(maxlength=30)
693
694 ``ForeignKey``, ``ManyToManyField`` et ``OneToOneField`` requiÚrent que le
695 premier argument soit une classe de modÚle, donc il faut utiliser l'argument
696 mot-clé ``verbose_name``::
697
698     sondage = models.ForeignKey(Sondage, verbose_name="le sondage associé")
699     sites = models.ManyToManyField(Site, verbose_name="liste de sites")
700     lieu = models.OneToOneField(Lieu, verbose_name="lieu associé")
701
702 Nous convenons de ne pas mettre de majuscule à la premiÚre lettre du
703 ``verbose_name``. Django mettra automatiquement la majuscule à la premiÚre
704 lettre lorsque ça sera nécessaire.
705
706 Les relations
707 -------------
708
709 C'est clair, la puissance des bases de données relationnelles repose sur les
710 relations entre les tables. Django offre la possibilité de définir les trois
711 types de relations les plus courantes entre des tables de données: many-to-one
712 (1..n), many-to-many (n..n) and one-to-one (1..1).
713
714 Les relations many-to-one
715 ~~~~~~~~~~~~~~~~~~~~~~~~~
716
717 Pour définir une relation « many-to-one », utilisez ``ForeignKey``. Vous
718 l'utilisez simplement comme n'importe quel autre type ``Field``: en l'incluant
719 comme un attribut de classe du modÚle.
720
721 ``ForeignKey`` requiert un argument en premiÚre position: La classe à laquelle
722 le modÚle est reliée.
723
724 Par exemple, si un modÚle ``Voiture`` a un ``Constructeur`` -- à savoir qu'un
725 ``Constructeur`` fabrique plusieurs voitures mais chaque ``Voiture`` n'a qu'un
726 seul ``Constructeur`` -- utilisez les définitions suivantes::
727
728     class Constructeur(models.Model):
729         # ...
730
731     class Voiture(models.Model):
732         constructeur = models.ForeignKey(Constructeur)
733         # ...
734
735 Pour créer une relation récursive -- un objet qui a une relation "many-to-one"
736 avec lui-même -- utilisez ``models.ForeignKey('self')``.
737
738 Si vous avez besoin de créer une relation sur un modÚle qui n'a pas encore été
739 défini, vous pouvez utiliser le nom du modÚle, plutÎt que l'objet du modÚle
740 lui-même::
741
742     class Voiture(models.Model):
743         constructeur = models.ForeignKey('Constructeur')
744         # ...
745
746     class Constructeur(models.Model):
747         # ...
748
749 Notez, cependant, que cette fonctionnalité d'utiliser des chaînes de caractÚres
750 pour définir des noms de modÚle dans ``ForeignKey`` est assez récente, et peut
751 buguer un peu dans certains cas.
752
753 DerriÚre tout ça, Django concatÚne ``"_id"`` au nom du champ pour créer son nom
754 de colonne de base de données. Dans l'exemple ci-dessus, la table de base de
755 données pour le modÚle ``Voiture`` aura une colonne ``constructeur_id``. (Vous
756 pouvez le changer explicitement en spécifiant ``db_column``; voir ``db_column``
757 plus bas.)  Cependant, votre code ne devrait jamais avoir à traiter avec le nom
758 de colonne de la base de données, sauf si vous écrivez du code SQL perso. Vous
759 traiterez toujours avec les noms de champ de votre objet de modÚle.
760
761 Il est suggéré, mais non indispensable, que le nom d'un champ ``ForeignKey``
762 (``constructeur`` dans l'exemple ci-dessus) soit le nom du modÚle, en
763 minuscules. Vous pouvez, bien-sûr, appeler le champ de la maniÚre que vous
764 voulez. Par exemple::
765
766     class Voiture(models.Model):
767         societe_qui_la_fabrique = models.ForeignKey(Constructeur)
768         # ...
769
770 Consultez `l'exemple de modÚle utilisant une relation Many-to-one`_ pour un
771 exemple complet.
772
773 .. _l'exemple de modÚle utilisant une relation Many-to-one:
774    ../models/many_to_one/
775
776 Les champs ``ForeignKey`` prennent un certain nombre d'arguments supplémentaires
777 pour définir comment devraient fonctionner les relations. Tous sont facultatifs:
778
779     =======================  ===========================================================
780     Argument                 Description
781     =======================  ===========================================================
782     ``edit_inline``          S'il n'est pas mis à ``False``, l'objet est
783                              Ã©dité "en ligne" à l'intérieur de la page de
784                              l'objet associé, de maniÚre imbriquée. Cela
785                              signifie que l'objet n'aura pas sa propre
786                              interface d'admin. Utilisez soit
787                              ``models.TABULAR``, soit ``models.STACKED``, qui,
788                              respectivement, désignent que les objets inbriqués
789                              sont affiché comme un tableau ou comme une "pile"
790                              de définitions de champs.
791
792     ``limit_choices_to``     Un dictionnaire d'arguments de recherche et de
793                              valeurs (voir le `document de référence de l'API
794                              de base de données`_) qui limite les choix
795                              disponible dans l'interface d'admin pour cet
796                              objet. Utilisez-le avec ``models.LazyDate`` pour
797                              limiter les choix des objets selon la date. Par
798                              exemple::
799
800                                 limit_choices_to = {'pub_date__lte': models.LazyDate()}
801
802                              autorise seulement le choix des objets liés avec
803                              un ``pub_date`` antérieure à la date et heure
804                              actuelle pour être choisi.
805
806                              Ã€ la place d'un dictionnaire, ça peut aussi être
807                              un objet ``Q`` (un objet avec une méthode
808                              ``get_sql()``) pour des requêtes plus complexe.
809
810                              Non compatible avec ``edit_inline``.
811
812     ``max_num_in_admin``     Pour les objets édités "en ligne", il s'agit du
813                              nombre maximum d'objets liés à afficher dans
814                              l'interface d'admin.
815                              Ainsi, si une pizza ne peut avoir que 10
816                              ingrédients, ``max_num_in_admin=10`` s'assurera
817                              qu'un utilisateur n'entre jamais plus de 10
818                              ingrédients à la fois.
819
820                              Notez que ça ne vérifiera pas si 10 ingrédients ont déjà
821                              Ã©té crées. Cette option ne contrÃŽle que
822                              l'interface d'admin; il ne s'occupe pas du niveau
823                              API Python ni du niveau base de données.
824
825     ``min_num_in_admin``     Le nombre minimum d'objets liés affichés dans
826                              l'interface d'admin. Normalement, au stade de la
827                              création, les objets "en ligne" sont montrés au
828                              nombre de ``num_in_admin``, et au stade de
829                              l'édition, des objects vide sont montrés au
830                              nombre de ``num_extra_on_change`` en plus de tous
831                              les objets liés pré-existants. Cependant, il n'y
832                              aura jamais d'objets liés affichés à un nombre
833                              inférieur à ``min_num_in_admin``.
834
835     ``num_extra_on_change``  Le nombre de champs vides d'objets liés
836                              supplémentaires, montrés au stade de modification.
837
838     ``num_in_admin``         Le nombre par défaut d'objets "en ligne" à
839                              afficher sur la page de l'objet au stade de
840                              l'ajout.
841
842     ``raw_id_admin``         Affiche seulement un champ pour saisir un nombre
843                              entier à la place d'un menu déroulant. C'est utile
844                              lorsqu'il est lié à un type d'objet qui aura trop
845                              d'enregistrements pour faire une boîte de
846                              sélection pratique.
847
848                              Non utilisé avec ``edit_inline``.
849
850     ``related_name``         Le nom à utiliser pour la relation depuis l'objet
851                              lié vers l'objet courant. Regardez la
852                              `documentation sur les objets liés`_ pour une
853                              explication complÚte et des exemples.
854
855     ``to_field``             Le champs de l'objet lié sur lequel porte la
856                              relation. Par défaut, Django utilise la clé
857                              primaire de l'objet lié.
858     =======================  ===========================================================
859
860 .. _`document de référence de l'API de base de données`: ../db_api/
861 .. _`documentation sur les objets liés`: ../db_api/#related-objects
862
863 Les relations many-to-many
864 ~~~~~~~~~~~~~~~~~~~~~~~~~~
865
866 Pour définir une relation many-to-many, utilisez la classe ``ManyToManyField``.
867 Vous n'avez qu'à l'utiliser comme n'importe quelle autre classe de type
868 ``Field``: en l'incluant comme un attribut de classe dans votre modÚle.
869
870 ``ManyToManyField`` requiert un argument obligatoire: la classe vers laquelle le
871 modÚle est lié.
872
873 Par exemple, si une ``Pizza`` a de multiples objets ``Ingredient`` --
874 c'est-à-dire qu'un ``Ingredient`` peut être sur plusieurs pizzas et que chaque
875 ``Pizza`` a plusieurs ingrédients -- voici comment vous représenteriez cela::
876
877     class Ingredient(models.Model):
878         # ...
879
880     class Pizza(models.Model):
881         # ...
882         ingredients = models.ManyToManyField(Ingredient)
883
884 Comme avec la classe ``ForeignKey``, une relation sur soi-même peut être définie
885 en utilisant la chaîne de caractÚres ``'self'`` à la place du nom du modÚle, et
886 vous pouvez référencer des modÚles non encore définis en utilisant une chaîne de
887 caractÚres contenant le nom du modÚle.
888
889 Il est suggéré, mais non requis, que le nom d'un champ ``ManyToManyField``
890 (``ingredients`` dans l'exemple ci-dessus) soit un pluriel décrivant l'ensemble
891 des objets du modÚle lié.
892
893 DerriÚre tout ça, Django crée une table de jointure intermédiaire pour
894 représenter la relation many-to-many.
895
896 La définition de ``ManyToManyField`` dans l'un ou l'autre modÚle n'a pas
897 d'importance, mais vous devez le faire dans un seul des modÚles -- pas dans les
898 deux.
899
900 Généralement, les instances de ``ManyToManyField`` devraient être définies dans
901 l'objet qui sera édité dans l'interface d'admin, si vous utilisez celle de
902 Django. Dans l'exemple précédent, ``ingredients`` est dans ``Pizza`` (plutÎt
903 qu'avoir un champ ``ManyToManyField`` ``pizzas`` dans ``Ingredient``) parce qu'il
904 est plus naturel de penser à une pizza ayant des ingrédients que à un ingrédient
905 présent dans plusieurs pizzas. Avec la maniÚre dont c'est défini dans l'exemple,
906 le formulaire d'administration de ``Pizza`` proposerait aux utilisateurs de
907 sélectionner les ingrédients.
908
909 Regardez `L'exemple de relation many-to-many entre modÚles`_ pour un exemple
910 complet.
911
912 .. _L'exemple de relation many-to-many entre modÚles: ../models/many_to_many/
913
914 Les objets ``ManyToManyField`` prennent un certain nombre d'arguments
915 supplémentaires pour définir la façon dont la relation devrait fonctionner.
916 Tous sont facultatifs:
917
918     =======================  ==================================================
919     Argument                 Description
920     =======================  ==================================================
921     ``related_name``         Lisez la description dans la section
922                              ``ForeignKey`` plus haut.
923
924     ``filter_interface``     Utilise une interface de filtrage Javascript
925                              discrÚte et astucieuse au lieu d'un
926                              ``<select multiple>`` à l'utilité discutable, dans
927                              le formulaire d'administration de cet objet.
928                              La valeur devrait être ``models.HORIZONTAL`` ou
929                              ``models.VERTICAL`` (c'est à dire que l'interface
930                              devrait être empilée horizontalement ou
931                              verticalement).
932
933     ``limit_choices_to``     Lisez la description dans la section
934                              ``ForeignKey`` plus haut.
935
936     ``symmetrical``          Uniquement employé dans la définition de champs
937                              ManyToManyFields sur eux-mêmes.
938                              Considérez le modÚle suivant:
939
940                                class Personne(models.Model):
941                                    amis = models.ManyToManyField("self")
942
943                              Lorsque Django traite ce modÚle, il reconnait
944                              avoir affaire à un ``ManyToManyField`` sur
945                              lui-même, et par conséquent, il n'ajoute pas
946                              d'attribut ``personne_set`` à la classe
947                              ``Personne``. À la place, le ``ManyToManyField``
948                              garantit d'être symétrique -- c'est-à-dire que si
949                              je suis ton ami, donc tu es mon ami.
950
951                              Si vous ne voulez pas de symétrie dans vos
952                              relations ``ManyToMany`` avec ``'self'``,
953                              définissez ``symmetrical`` à ``False``. Cela
954                              forcera Django à ajouter un descripteur pour la
955                              relation inverse, permettant aux relations
956                              ``ManyToMany`` d'être asymétriques.
957
958     =======================  ==================================================
959
960 Les relations one-to-one
961 ~~~~~~~~~~~~~~~~~~~~~~~~
962
963 La sémantique des relations one-to-one est en cours de changement, nous ne vous
964 recommandons donc pas de les utiliser. Si cela ne vous fait pas partir en
965 courant, jetez un œil à ceci.
966
967 Pour définir une relation one-to-one, utilisez la classe ``OneToOneField``. Vous
968 n'avez qu'à l'employer comme n'importe quelle autre classe de type ``Field``: en
969 l'incluant comme attribut de classe dans votre modÚle.
970
971 Il est des plus utiles sur la clé primaire d'un objet quand celui-ci "étend" un
972 autre objet d'une certaine façon.
973
974 ``OneToOneField`` requiert un argument obligatoire: La classe vers laquelle le
975 modÚle est lié.
976
977 Par exemple, si vous êtes en train de construire une base de données de "lieux",
978 vous définirez des données basiques tels qu'une adresse, un numéro de téléphone,
979 etc. dans la base de données. Puis, si vous voulez construire une base de
980 données de restaurants étendant la définition d'un lieu, plutÎt que de vous
981 répéter et de repliquer ces champs dans le modÚle ``Restaurant``, vous pourrez
982 relier ``Restaurant`` à ``Lieu`` grâce à ``OneToOneField`` (parce qu'un
983 restaurant "est-un" lieu).
984
985 Comme avec ``ForeignKey``, une relation vers soi-même peut être définie en
986 utilisant la chaîne de caractÚres ``"self"`` à la place du nom de modÚle ; les
987 références vers des modÚles non encore définis peuvent être faites en utilisant
988 une chaîne de caractÚres contenant le nom du modÚle.
989
990 Ce ``OneToOneField`` remplacera en fait le champ de clé primaire ``id`` (puisque
991 les relations one-to-one partagent la même clé primaire), et sera affiché comme
992 un champ en lecture seule lorsque vous éditerez un objet dans l'interface
993 d'admin:
994
995 Regardez `l'exemple de relation one-to-one entre modÚles`_ pour un exemple
996 complet.
997
998 .. _l'exemple de relation one-to-one entre modÚles: ../models/one_to_one/
999
1000 Les options Meta
1001 ================
1002
1003 Définissez des métadonnées pour votre modÚle en utilisant une classe interne
1004 ``Meta``, comme ceci::
1005
1006     class Foo(models.Model):
1007         bar = models.CharField(maxlength=30)
1008
1009         class Meta:
1010             # ...
1011
1012 Les métadonnées de modÚle sont « tout ce qui n'est pas un champ », telles que
1013 les options de tri, etc.
1014
1015 Voici une liste de toutes les options ``Meta`` possibles. Aucune option n'est
1016 obligatoire. Ajouter la définition ``class Meta`` dans un modÚle est tout à
1017 fait optionnel.
1018
1019 ``db_table``
1020 ------------
1021
1022 Le nom de la table de base de données à utiliser pour le modÚle::
1023
1024     db_table = 'album_de_musique'
1025
1026 Si non défini, Django utilisera ``app_label + '_' + model_class_name``.
1027 Voir « Les noms de table » plus bas pour plus de détails.
1028
1029 Si le nom de votre table de base de données est un mot réservé SQL, ou contient
1030 des caractÚres non permis dans les noms de variable Python -- notamment, le
1031 tiret -- cette option est faite pour vous. Django s'occupe ensuite de placer les
1032 noms de table et de colonne entre quotes automatiquement.
1033
1034 ``get_latest_by``
1035 -----------------
1036
1037 Le nom d'un ``DateField`` ou ``DateTimeField`` dans le modÚle. Cela spécifie le
1038 champ par défaut à utiliser dans la méthode ``latest()`` de votre modÚle
1039 ``Manager``.
1040
1041 Exemple::
1042
1043     get_latest_by = "date_commande"
1044
1045 Regardez les `docs sur latest()`_ pour plus de détails.
1046
1047 .. _docs sur latest(): ../db_api/#latest-field-name-none
1048
1049 ``order_with_respect_to``
1050 -------------------------
1051
1052 Marque cet objet comme « triable » respectivement au champ donné. Ceci est presque
1053 toujours utilisé avec des objets liés pour permettre de les trier respectivement
1054 à un objet parent. Par exemple, si une ``Reponse`` est liée à un objet
1055 ``Question``, et qu'une question possÚde plus d'une réponse, et que l'ordre des
1056 réponses importe, vous ferez ceci::
1057
1058     class Reponse(models.Model):
1059         question = models.ForeignKey(Question)
1060         # ...
1061
1062         class Meta:
1063             order_with_respect_to = 'question'
1064
1065 ``ordering``
1066 ------------
1067
1068 Le tri par défaut pour l'objet, utilisé pour obtenir des listes d'objets::
1069
1070     ordering = ['-date_commande']
1071
1072 Il s'agit d'un tuple ou d'une liste de chaînes de caractÚres. Chaque chaîne est
1073 un nom de champ avec un préfixe facultatif "-", qui indique un ordre
1074 décroissant. Les champs sans un "-" devant seront triés dans l'ordre croissant.
1075 Utilisez la chaîne "?" pour mélanger aléatoirement.
1076
1077 Par exemple, pour trier selon un champ ``date_publication`` de maniÚre
1078 croissante, utilisez ceci::
1079
1080     ordering = ['date_publication']
1081
1082 Pour trier selon ``date_publication`` de maniÚre décroissante, utilisez ceci::
1083
1084     ordering = ['-date_publication']
1085
1086 Pour trier selon ``date_publication`` de maniÚre décroissante, puis selon
1087 ``auteur`` de maniÚre croissante, utilisez ceci::
1088
1089     ordering = ['-date_publication', 'auteur']
1090
1091 Regardez `Spécifier un ordre de tri`_ pour plus d'exemples.
1092
1093 Notez que, sans regarder combien de champs sont dans ``ordering``, le site
1094 d'administration utilise seulement le premier champ.
1095
1096 .. _Spécifier un ordre de tri: ../models/ordering/
1097
1098 ``permissions``
1099 ---------------
1100
1101 Ce sont des permissions supplémentaires pour entrer dans la table de permission
1102 lors de la création de cet objet. Les permissions d'ajout, suppression et
1103 modification sont automatiquement créées pour chaque objet dont ``admin`` est
1104 défini. Cet exemple spécifie une permission supplémentaire,
1105 ``peut_livrer_pizzas``::
1106
1107     permissions = (("peut_livrer_pizzas", "Peut livrer des pizzas"),)
1108
1109 Il s'agit d'une liste ou d'un tuple formé de paire (tuples de 2 éléments) dans
1110 le format ``(code_de_la_permission, nom_intuitif_de_la_permission)``.
1111
1112 ``unique_together``
1113 -------------------
1114
1115 Définit les noms de champ qui, pris ensemble, doivent être uniques::
1116
1117     unique_together = (("livreur", "restaurant"),)
1118
1119 Il s'agit d'une liste de listes des champs qui doivent être uniques lorsqu'ils
1120 sont considérés ensemble. C'est utilisé dans l'administration de Django et est
1121 renforcé au niveau de la base de données (c'est-à-dire que l'instruction
1122 ``UNIQUE`` appropriée est incluse dans la clause ``CREATE TABLE``).
1123