J'ai beaucoup travaillé avec Django, et ce depuis la version 0.91. C'est un framework formidable. Le seul défaut que je lui trouve se situe au niveau des formulaires. Cette version 1.4 arrive bien longtemps après la version 1.3, et elle n'apporte pas de grosses nouveautés. La seule chose intéressante que je trouve dans le changelog est le prefetch_related, qui remplace le select_related, qui peut améliorer beaucoup de choses au niveau des performances SQL. LA grosse nouveauté étant un meilleur support des fuseaux horaires \o/ Bref, j'attendais beaucoup au niveau des formulaires, et y'a pas ce que je veux… Je m'explique :
Je veux faire une validation au niveau d'un champ de formulaire en fonction de l'utilisateur identifié. Pour cela, il me faut accéder au request.user dans l'objet Form. Et là, pas possible directement ! Je dois redéfinir la méthode init avec un nouveau paramètre request, ce qui rend l'instanciation incompatible avec les vues génériques. Le moyen le plus pratique que j'ai trouvé est de déclarer la classe dans une méthode qui prend en paramètre ce paramètre request, ce qui me donne très peu de code à réécrire au niveau de la vue. Mais niveau performance, ce n'est pas bon du tout, sans parler de l'élégance ! Je me retrouve avec quasiment chacun de mes formulaires encapsulés dans une méthode.
Les Formsets sont lourds à implémenter quand on veut faire quelque chose d'un peu plus poussé qu'une simple liste de formulaires. Par exemple, pour des formulaires imbriqués. J'ai développé un petit outil pour simplifier la chose.
Les Formsets (encore eux) ne sont pas fiables (en tous cas pour la version 1.3). Un simple exemple dans une page d'admin de django, en activant l'édition inline dans les listes, en modifiant le code html du management_form à la main avant soumission (en augmentant le champ INITIAL_FORMS), on se retrouve avec une jolie erreur 500. Je vais tester avec django 1.4, mais je me pose de plus en plus de questions sur la fiabilité de la mise en production des formulaires tels qu'ils sont implémentés dans django.
Les validations dans les formulaires peuvent être différentes de celles dans les modèles, et c'est trop souvent le cas. C'est un désastre pour la cohérence de la base de données quand on utilise le shell python pour manipuler les objets, même si ça peut apporter un intérêt dans certains cas.
Je n'aimais pas rails à ses débuts, c'est pour ça que j'avais choisi django à cette époque. Mais devant la loooooongue attente pour résoudre ces problèmes, et voyant que django 1.4 n'allait rien arranger, je me suis penché sur la version 3.1 de rails, qui supporte les nested forms (depuis la version 3), qui me permet d'assigner le propriétaire lors de la création d'un objet dans un formulaire automatiquement, … Et il n'y a pas cette notion de formulaire, entre le contrôleur et la vue, chose qui me pose problème dans django, justement !!! Alors, non, je dis Django n'est pas un framework MTV, mais un framework MTFV (Modèle Template Formulaire View, ou VTFM, vas te fa… mett.. si tu veux qqch de plus avancé…), tant cette notion de formulaire est importante et contraignante dans django !
Avez-vous déjà eu ce genre de problèmes ? Avez-vous des réponses à m'apporter ? Est-ce que django n'est pas adapté à ce que je voudrais en faire ?
[^] # Re: Mangez-en, c'est bon !
Posté par Damien Szczyt (site web personnel) . En réponse à la dépêche Sortie de Django 1.4. Évalué à 1.
J'ai beaucoup travaillé avec Django, et ce depuis la version 0.91. C'est un framework formidable. Le seul défaut que je lui trouve se situe au niveau des formulaires. Cette version 1.4 arrive bien longtemps après la version 1.3, et elle n'apporte pas de grosses nouveautés. La seule chose intéressante que je trouve dans le changelog est le prefetch_related, qui remplace le select_related, qui peut améliorer beaucoup de choses au niveau des performances SQL. LA grosse nouveauté étant un meilleur support des fuseaux horaires \o/ Bref, j'attendais beaucoup au niveau des formulaires, et y'a pas ce que je veux… Je m'explique :
Avez-vous déjà eu ce genre de problèmes ? Avez-vous des réponses à m'apporter ? Est-ce que django n'est pas adapté à ce que je voudrais en faire ?