Pluriels
Mer 28 mars 2007
Dans Django, une des fonctionnalités les
plus sympatoches, c'est la création d'une interface d'administration
"clés en main", très complète, au design épuré et esthétique, et qui
permet de faire les manipulations de base (ajout / modif / suppression)
des données sans avoir à coder quoi que ce soit.
Pour ceux qui voudraient savoir comment qu'on fait, c'est chez le
Biologeek qu'il faut
aller.
C'est propre.
Mais j'avais un petit soucis avec une fonctionnalité apparemment voulue, mais qui m'est apparue bugguée au premier abord.
Bon, avant tout, initialisons une application dans mon projet :
$ python manage.py startapp menagerie
Fastoche. Je dispose maintenant d'un fichier prêt à abriter mes modèles :
class Animal(models.Model):
nom = models.CharField(maxlength=50)
class Admin:
pass
Rien qu'en créant ce modèle, je suis en train de définir une classe
(Animal), qui a un nom. Et la sous-classe que je rajoute (Admin) permet
à l'interface d'administration de rajouter automatiquement la
possibilité de gérer les Animaux de ma ménagerie.
Il m'aura suffi de rajouter l'application dans le fichier settings.py
(variable INSTALLED_APPS), puis de lancer la commande :
$ python manage.py syncdb
Et j'obtiens :
Animal au singulier, "Animals" au pluriel. Pas très sérieux, ça. Oui, en
effet, l'interface de gestion permet d'administrer des listes
d'objets, mais de là à généraliser le pluriel en "s"... Même en
anglais, tous les mots n'ont pas de pluriel en "s" (ex : "story ->
stories').
Mais c'est certes sympa d'avoir une gestion "automatique" du pluriel,
mais ça a quand même ses limites.
Mais dans la série "Django pense à toi", je voudrais : LA SOUS-CLASSE
META
!
En rajoutant une classe dotée des attributs adéquats :
class Animal(models.Model):
nom = models.CharField(maxlength=50)
class Admin:
pass
class Meta:
verbose_name_plural = "animaux"
Et badaboum !
C'est le top. J'imagine qu'il y a autant de formes plurielles que de
langues, et l'internationalisation de l'interface automatique se fait
réellement sans effort.
Le pied.
Merci qui ? Merci Harry
Potter !