2010-07-02 5 views
2

J'utilise django south sur un projet plus important, la seule chose que je n'aime pas, c'est que vous ne pouvez pas créer de schemamigrations pour toutes vos applications à la fois (J'ai beaucoup d'applications qui héritent du même modèle abstrait, si je change ce modèle de base il y a beaucoup d'applications à migrer) - pensé que vous pouvez réellement les migrer tous en même temps (en utilisant migrate --all). Je voudrais savoir s'il existe une solution facile pour django south de gérer un tas d'applications à la fois ou si quelqu'un a un bon script prêt à le faire?Django South: Création de schemamigration pour plusieurs applications

Répondre

9

Première chose: des applications distinctes devraient limiter les interactions du modèle

maintenant qu'il a dit, nous allons embrasser la contrainte. Aucun sud ne peut pas créer un seul fichier de migration pour de nombreuses applications et je ne sais pas comment générer de nombreuses migrations pour de nombreuses applications dans une seule commande manage.py.

Tout ce qui vous reste est un script maintenant. Vous pouvez utiliser le tissu incroyable http://docs.fabfile.org/ d'avoir une seule commande pour générer vos migrations:

APPS_TO_WATCH = ['myapp','myotherapp','toomanyapps'] 
def migration(): 
    for app in APPS_TO_WATCH: 
     local('python manage.py schemamigration %s --auto' % app) 

puis appeler à l'aide migration fab

+0

Oui bonne idée. déjà en utilisant le tissu, l'utilisera aussi pour cela! Mes problèmes dérivent davantage du fait que j'avais besoin d'ajouter quelques fonctionnalités aux modèles de base django et de réutiliser cette fonctionnalité dans quelques applications; donc c'est la seule possibilité de le faire je suppose! –

+1

La première ligne et demi de cette réponse a eu mon upvote – lajarre

3

Ce n'est pas tout à fait une réponse à votre question, mais peut-être aider en fonction exactement de ce que vous essayez de faire.

Vous pouvez définir des migrations en fonction des migrations d'autres applications. Par exemple:

class Migration(SchemaMigration): 
    depends_on = (
     ("other_app", "0001_initial"), 
    ) 

Cela permettra d'assurer la gestion ont été toutes les migrations pré-requis nécessaires avant le vôtre.

1

Un ajout au tissu réponse ci-dessus, ajoutez à votre fabfile.py:

from myproj.settings import INSTALLED_APPS 

def initmigration(): 
    for app in INSTALLED_APPS: 
     if 0 == app.find('myproj.'): 
      _app = app.split('myproj.')[1] 
      local('python manage.py convert_to_south %s' % _app) 

Maintenant, exécutez fabric initmigration. Peut faire la même chose pour la fonction migration ci-dessus.

Questions connexes