Django South: Creating schemamigration for more than one app
Asked Answered
M

3

2

I'M using django south on a bigger project, the only thing I don't like about it, that you can't create schemamigrations for all of your apps at once (I have a lot of apps that inherit from the same abstract model, if I change that base model there are alot of apps to migrate) - thought you can actually migrate all of them at once (using migrate --all).

So I'd like to know if theres an easy solution for django south to handle a bunch of apps at once or if anyone has a nice script ready for doing that?

Monadnock answered 2/7, 2010 at 13:51 Comment(0)
C
9

First thing: separate applications should limit model interactions

now that it's said, let's embrace the constraint. No south cannot create a single migration file for many apps and I don't know how to generate many migrations for many app in a single manage.py command.

All that is left to you is a script now. You could use the amazing fabric http://docs.fabfile.org/ to have a single command to generate your migrations :

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

and then call it using fab migration

Confidence answered 2/7, 2010 at 14:57 Comment(1)
Yes great idea. already using fabric, will use it for this as well! My problems derive more from the point that I needed to add some functionality to the basic django models and reuse this functionality in a couple of apps; so thats the only possiblity to do it i guess!Monadnock
O
3

This is not quite an answer to your question, but might help out depending on exactly what you are trying to do.

You can define migrations as depending on migration(s) from other apps. For example:

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

This will ensure all required pre-requisite migrations have been run before yours.

Overtly answered 4/7, 2010 at 8:20 Comment(0)
V
1

An addition to the fabric answer above, add this to your 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)

Now run fabric initmigration. Can do similar thing for the migration function above.

Vastah answered 28/11, 2011 at 9:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.