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 :
Animals

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 !
Animaux

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 !