Queryset-refactor

Dim 27 avril 2008

Toute la communauté Django est en émoi : la branche "queryset-refactor" a été fusionnée dans le tronc de Django (svn).

Cette branche porte en elle de profonds changements et améliore immensément le coeur de Django et le fonctionnement des requêtes sur les bases de données. L'une des améliorations fondamentales, de mon point de vue, c'est l'héritage des modèles. Le fondement même de la programmation orientée objet ne pouvait jusque là être transplanté dans ce framework. Par exemple, pour avoir un "profil utilisateur", jusqu'à présent, il fallait jouer du tournevis et avoir une structure à peu près comme suit :

from django.db import models
from django.contrib.auth.models import User

class MonProfilUtilisateur(models.Model):
    # pour lier l'utilisateur et son profil
    user = models.ForeignKey(User, unique=True)

    # Les autres infos...
    telephone = models.CharField(max_length=20)
    fax = models.CharField(max_length=20)

Soit une relation 1 - 1 avec le modèle "User". Bof bof... Et pour utiliser la notion de profil, il fallait rajouter dans settings.py :

AUTH_PROFILE_MODULE = "myapp.monprofilutilisateur"

Mouais.

Désormais, on pourra faire hériter un modèle par un autre et écrire :

class MonProfilUtilisateur(User):
    # Les autres infos...
    telephone = models.CharField(max_length=20)
    fax = models.CharField(max_length=20)

Ce qui est vrai pour les modèles "User" sera également vrai pour les modèles définis par le développeur, comme l'indique la documentation. Je pense que cette possibilité présente une avancée majeure dans Django, et elle ouvre des perspectives absolument détonantes.

Plus je réfléchis à l'héritage des modèles, plus j'entrevois de fonctionnalités qui en découleraient ; j'ai vraiment hâte de pouvoir tester tout ça.

Note : Pour le moment, l'héritage n'est pas intégré dans le module d'administration ; ce sera peut-être chose faite après fusion de la branche "newforms-admin" qui attend son heure, bien au chaud, depuis longtemps à présent.