08-03-2013, 23:39
Vous trouverez une utilisation de contribute_to_model() dans le fichier creme/creme_core/models/auth.py (même si cette utilisation disparaîtra lorsque nous passeront a Django1.5 - mais c'est une autre histoire - la fonction en elle-même restera). Version simplifiée :
Il suffit de créer un modèle abstrait, et ses champs seront ajoutés à la classe qu'on veuxt modifier. On peut aussi passer la liste des champs qu'on veut supprimer. Mais comme je l'ai dit dans mon précédant post, cela ne marche malheureusement pas encore avec les ManyToManyField (je n'ai pas pris le temps de me pencher sur la question).
Sinon faire un ManyToManyField vers un nouveau modèle, que vous enregistrez dans creme_config (voir la documentation de création de module dans doc/) afin que les utilisateurs puissent créer de nouveaux choix disponibles, est bien la bonne façon de faire.
Reste la création/modification de table.
- Si vous désactivez 'south', la commande syncdb est celle de base de Django : elle crée les tables qui n'existe pas encore, mais ne touche pas aux tables existantes (voir mon commentaire précédant). Du coup si vous supprimez votre base à chaque fois, vos modifications de modèle seront bien prise en compte (mais vous perdez vos données évidement).
- Si activez 'south', la commande syncdb ignorera toutes les apps ayant un répertoire 'migrations', c'est à dire la plupart des apps Creme ; vous devez alors passer par les commandes schemamigration et migrate (en autres). Je vous encourage à lire la documentation de south dont je parlais dans mon message précédant.
Mon conseil : désactiver south pendant la phase de développement et développer en Tests Driven; l'avantage est que dans les test unitaires, les changement de modèles sont pris en compte entre chaque lancement des tests (donc pas besoin de casser la base à la main à chaque fois). Puis avant la mise en production activer south, et générer les migrations afin d'être prêt pour les changements ultérieurs proprement.
Code :
class UserProfile(Model):
is_team = BooleanField(verbose_name=_(u'Is a team ?'), default=False)
class Meta:
abstract = True
contribute_to_model(UserProfile, User)
Il suffit de créer un modèle abstrait, et ses champs seront ajoutés à la classe qu'on veuxt modifier. On peut aussi passer la liste des champs qu'on veut supprimer. Mais comme je l'ai dit dans mon précédant post, cela ne marche malheureusement pas encore avec les ManyToManyField (je n'ai pas pris le temps de me pencher sur la question).
Sinon faire un ManyToManyField vers un nouveau modèle, que vous enregistrez dans creme_config (voir la documentation de création de module dans doc/) afin que les utilisateurs puissent créer de nouveaux choix disponibles, est bien la bonne façon de faire.
Reste la création/modification de table.
- Si vous désactivez 'south', la commande syncdb est celle de base de Django : elle crée les tables qui n'existe pas encore, mais ne touche pas aux tables existantes (voir mon commentaire précédant). Du coup si vous supprimez votre base à chaque fois, vos modifications de modèle seront bien prise en compte (mais vous perdez vos données évidement).
- Si activez 'south', la commande syncdb ignorera toutes les apps ayant un répertoire 'migrations', c'est à dire la plupart des apps Creme ; vous devez alors passer par les commandes schemamigration et migrate (en autres). Je vous encourage à lire la documentation de south dont je parlais dans mon message précédant.
Mon conseil : désactiver south pendant la phase de développement et développer en Tests Driven; l'avantage est que dans les test unitaires, les changement de modèles sont pris en compte entre chaque lancement des tests (donc pas besoin de casser la base à la main à chaque fois). Puis avant la mise en production activer south, et générer les migrations afin d'être prêt pour les changements ultérieurs proprement.