29-01-2013, 23:32
Citation :Par exemple, si je ne veux pas afficher le champ Skype dans le formulaire de saisie d'un contact, est-ce que le fait de commenter les lignes concernant skype dans /forms/contact.py et dans /models/contact.py ne désorganisera pas le reste du programme ? C'est un exemple, mais je me demande si le commentaire est, dans ce cas-là, la meilleure des solutions.
(Désolé j'avais écrit une réponse plus complète, mais ce magnifique forum l'a perdue... et là je suis un peu fatigué)
Très bonne question. Il y a en gros 2 méthodes en effet :
- 1) Ne pas modifier le code, et injecter les modifications aux apps existantes depuis vos propres apps. Il est possible de modifier les modèles (creme_core/utils/contribute_to_model.py), hooker les formulaires (méthodes add_post_*_callback() des formulaires), surcharger les templates (répertoire creme/templates/).
- 2) Modifier le code existant (dans votre cas vous devez modifier le template affichant le champ 'skype').
La 1ère méthode est plus propre car votre code se comporte comme un simple plugin ; le jour où Creme sera packageable/packagé par votre distribution, vous pourriez utiliser cette version par exemple. En revanche elle est plus complexe à mettre en oeuvre. Si vous optez pour la 2ème méthode, je vous conseille de garder vos modifications à part, par exemple avec l'extension 'mq' de mercurial (bitbucket permet de créer des queues de patch directement).
Quelque soit la méthode choisie, la modification peut avoir des conséquences ; si le champ est requis par du code métier et que vous l'avez enlevé il va y avoir un problème (une des joies du typage dynamique ). Heureusement il y a les tests unitaires, qui vous permettent de constater les 'dégats'. Le code de Creme est plutôt bien couvert par les tests. Dans les cas d'un champ uniquement informatif comme 'skype', les conséquences seront sans gravité ; même si un tests listant les champs attendu pourra échouer évidemment (il faut dans l'absolu corriger le test pour ne pas que l'échec en couvre d'autres).