Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Nous avons dans le précédent chapitre découvert trois types de champs : CharField, TextField et ForeignKey. Nous allons continuer dans cette lancée avec la découverte d'autres champs. On se basera sur le modèle suivant tout au long du chapitre : code d'exemple, description, image de ce que ça donne dans l'administration générée par Django et attributs obligatoires pour certains champs.
Dans un second temps nous verrons les options possibles sur ces champs, qui nous permettront de mieux les configurer et avoir quelque chose à notre goût.
Bonne lecture les
Djangonautes !
Nous allons dans cette partie découvrir les différents champs existants sous Django. Cette découverte vous permettra de créer des applications (avec un côté administratif seulement, pour le moment) complètes.
Demandons des informations particulières
- EmailField : ce champ de son nom explicite récupérera des adresses email. Il se présentera sous la forme d'un simple CharField à la différence que Django vérifiera si ce qu'il contient est bien une adresse email. Une erreur sera affichée (ou pas) en conséquent. Une adresse email se présente sous la forme suivante : mynameisdjango@djangocestbien.fr.
Code : Python1 | email = models.EmailField()
|
- IPAddressField : le champ IPAddressField contiendra obligatoirement une adresse IP. Il se présentera sous la simple forme d'un CharField avec la vérification si oui ou non ce qui est à l'intérieur est bien une adresse IP. Pour rappel une adresse IP se présente sous la forme 87.125.36.254.
Code : Python1 | adresse_ip = models.IPAddressField()
|
- URLField : ce champ permettra de récupérer des adresses vers des sites Web. Le champ est de type CharField et vérifiera d'une part la validité de l'adresse de par sa forme et regardera si oui ou non l'adresse entrée renvoie ou pas une erreur 404. Un message d'erreur sera bien entendu affiché en conséquent.
Code : Python1 | site_web = models.URLField()
|
Faisons des choix !
- BooleanField : BooleanField permettra un choix : vrai ou faux à partir d'une case à cocher. La case est cochée, c'est vrai, dans le cas contraire, c'est faux. Rien de plus à préciser sur ce champ.
Code : Python1 | choix = models.BooleanField()
|
- NullBooleanField : ce champ se base sur le même principe que son grand frère, BooleanField, à la différence que lui proposera les choix Oui / Non / Inconnu. Nous aurons pour faire le choix un menu déroulant.
Code : Python1 | choix = models.NullBooleanField()
|
En ce qui concerne les informations calendaires
- DateField : comme l'indique son nom, ce champ permettra de récupérer une date, sous la forme AAAA-MM-JJ. On notera dans l'interface d'administration de Django un calendrier facilitant cette gestion : on clique, un petit calendrier apparaît et on peut sélectionner le jour.
Code : Python1 | date = models.DateField()
|
- TimeField : une fois qu'on a la date, il faudrait l'heure, c'est ce à quoi va servir ce champ. Il va nous permettre de définir une heure sous la forme suivante : HH:MM:SS. Rien de plus à préciser sur ce champ.
Code : Python1 | heure = models.TimeField()
|
- DateTimeField : voilà un mix des champs DateField et TimeField. Il permettra de récupérer à la fois une date et une heure, pas besoin de séparer les deux champs donc. Les formats sont toujours les mêmes qu'énoncés précédemment.

Code : Python1 | date_heure = models.DateTimeField()
|
Des nombres dans tous les sens !
- FloatField : un champ recevant des nombres décimaux. Il requiert deux arguments obligatoires, max_digits et decimal_places, respectivement pour le nombre maximal de chiffres avant la virgule et le nombre maximal de chiffres après.
Code : Python1 | nombre_decimal = models.FloatField(max_digits=10, decimal_places=8)
|
- IntegerField : ce champ permettra de récupérer un nombre entier. Sa présentation sera une boîte de saisie d'une seule ligne, à l'image d'un CharField.
Code : Python1 | nombre = models.IntegerField()
|
Après cette longue liste des différents champs que vous pouvez rencontrer et utiliser, voilà les options qu'ils peuvent avoir. Les options vont permettre de dire si oui ou non ce champ est obligatoire ou pas, s'il accepte les valeurs nulles, etc.
Tout est question de mise en forme
- default : c'est la valeur qu'aura par défaut le champ. Il s'utilise de la façon suivante : pseudonyme = models.CharField(max_length=100, default='.skaz')
;
- help_text : vous pourrez mettre, à l'aide de cette option un petit texte ayant pour but de préciser un champ dans l'administration de Django, ce petit texte apparaîtra sous le champ. Cette option s'utilise de la façon suivante : pseudonyme = models.CharField(max_length=100, help_text='Renseignez ici le pseudonyme')
;
- editable : rendez impossible l'édition des champs où cette option est paramétrée à False. Par défaut la valeur est True, les champs sont éditables. Cette option s'utilise de la façon suivante : pseudonyme = models.CharField(max_length=100, editable=False)
;
- radio_admin : je parlais un peu plus haut des listes déroulantes (je vais en reparler un peu plus bas également), vous pouvez à la place de ces dernières mettre des listes à choix unique, c'est ce que fait cette option, qui s'utilise de la façon suivante : choix = models.NullBooleanField(radio_admin=True)
. Mise à True, cette option modifiera la liste par des boutons radios.
Comme vous l'avez sans doute remarqué, Django donne dans son administration un nom aux différents champs. Ce nom dépend de la façon dont vous le nommez dans votre modèle. Il existe une façon de contourner ce problème, renseignez par exemple le nom que vous voulez voir apparaître dans l'interface d'administration de la façon suivante : pseudonyme = models.CharField('Pseudonyme souhaité', max_length=100)
.
Les options null et blank
- blank : Cette option passée à True sur un champ permettra de laisser ce dernier vide. Si vous avez essayé l'application précédemment créée, vous deviez renseigner tous les champs obligatoirement, à l'aide de cette option, vous pouvez dire à Django qu'il est possible qu'aucune valeur ne soit rentrée dans le champ. Cette option s'utilise de la façon suivante : pseudonyme = models.CharField(max_length=100, blank=True)
. Cette option n'agit qu'avec l'administration de Django et non avec votre SGBD, ce qui signifie que s'il n'y a rien, ça n'enregistrera rien dans la base de données. À noter pour l'option suivante :
- null : cette option peut paraître très semblable à la précédente à la différence qu'au lieu de ne rien enregistrer dans la base de données si elle est mise à True, elle enregistrera NULL, par défaut, cette option est mise à False. L'utilisation se fait toujours sur le même principe, à savoir, comme suit : date = models.DateField(null=True)
.
L'unicité, il n'y a que ça de vrai ! (ou pas)
- unique : cette option mise à True sur un champ indiquera à la base de données à et Django qu'il doit être unique, en conséquent, aucune autre entrée ne pourra avoir la même valeur. Cette option s'utilise de la façon suivante : pseudonyme = models.CharField(max_length=100, unique=True)
;
- unique_for_date : admettons deux champs, un champ code_secret de type CharField et un champ inscription de type DateField. Utiliser l'option unique_for_date de la façon suivante sur le champ code_secret rendrait obligatoirement unique le champ code_secret à la date DateField. Le code s'utilise de la façon suivante :
Code : Python1
2 | date = models.DateField()
code_secret = models.CharField(max_length=100, unique_for_date=date)
|
Pour conclure, cela revient à dire que l'on ne peut recevoir deux entrées code_secret identiques le même jour ;
- unique_for_month : l'explication est la même que pour unique_for_date à la différence près que le champ code_secret, pour reprendre cet exemple, ne pourra être entré deux fois dans la base de données le même mois ;
- unique_for_year : je ne vais pas encore réexpliquer le principe. Comme pour les mois, c'est ici pour les années.
Faisons des choix, hé oui, encore !
Partons du principe que vous ayez un module dans une application à créer où un champ permettra de renseigner la couleur avec laquelle vous préférez écrire. Quatre choix possibles : bleu, noir, rouge et vert. Comment faire pour laisser ces choix sans passer par un autre module avec un
ForeignKey dessus ? En utilisant l'option
choices évidemment !
Nous allons définir ces choix dans un tuple de la façon suivante :
Code : Python1
2
3
4
5
6 | couleurs = (
('Bleu', 'Bleu'),
('Noir', 'Noir'),
('Rouge', 'Rouge'),
('Vert', 'Vert'),
)
|
Vous remarquerez que dans le tuple principal se trouvent d'autres tuples contenant nos valeurs. La première valeur correspond à ce qui sera enregistré dans la base de données, et la seconde à ce qui sera affiché à l'utilisateur : ici, ce sont les mêmes. Dans un champ de type
CharField, définissez à présent l'option
choices à
couleur pour obtenir une liste déroulante et permettre un choix restreint à l'utilisateur.
Code : Python1
2
3
4
5
6
7
8 | couleurs = (
('Bleu', 'Bleu'),
('Noir', 'Noir'),
('Rouge', 'Rouge'),
('Vert', 'Vert'),
)
couleur = models.CharField(max_length=100, choices=couleurs)
|
Accompagnons les champs DateField, TimeField et DateTimeField !
Par défaut, les champs cités dans le titre
DateField, TimeField et DateTimeField n'ont pas de valeur par défaut, la date ou / et l'heure courante par exemple, ça peut cependant être un gain de temps. Nous allons remédier à cela avec l'option
auto_now, qui, une fois mise à
True affichera la date / heure courante, pratique non ? Allez, voilà ce que ça donne dans votre code :
Code : Python1 | date_heure = models.DateTimeField(auto_now=True)
|
Fiou ! Enfin terminé. Ce chapitre s'apparente plus à une annexe qu'autre chose mais bon, il était pour moi un élément essentiel et fait partie intégrante du tutoriel. Je n'ai abordé qu'une partie des champs disponibles, ceux qui vous serons les plus utiles pour être précis. Si vous voulez en découvrir d'autres, la documentation est là.
Maintenant que vous connaissez plus de champs que
CharField et
TextField, je vas pouvoir vous lâcher dans un T.P. comme des grands ! C'est dans le prochain chapitre...