Hi gang, I'm trying to refactor the apps in my project, and I can't figure out any clean way to migrate models with their data from one app to another. I'm really looking for answers to two questions:
1. Is there any canonical way to do this? 2. I've moved my models to the new app but I have them using the tables from the old app using Meta.db_table. How do I make migrations understand what's going on and not try to delete my old tables? Once migrations gets what's going on, how do I rename the old table so it fits the new app name so I no longer need Meta.db_table? -- For question 1. I'm really surprised there isn't a good way to do this. I mean—this is kind of a blatant use case for a migration—moving a model from one app to another. My initial thought was to use a use a three phase migration. Create new models, copy data over, delete old models. But I'd really rather not 'cause the models are all very interconnected and that seems like a recipe for a foreign key disaster. What I actually went with was to move all the models over to the new app, and then point them at the old tables using Meta.db_table. Everything works, but when I run makemigrations it is confused as crap and wants to destroy everything, which brings me to question 2... --- So question 2, now that I have my model code in a new app pointing at the old tables, how do I get the tables renamed to use canonical table names and let migrations know wtf is going on? With the current situation, if I run makemigrations it does something like this Migrations for 'new_app': 0001_initial.py: - Create model Building ... - Add field contact to building ... Migrations for 'old_app': 0006_auto_delete_blah.py: - Remove field contact from building ... - Delete model Building ... all of which is roughly correct, just doesn't keep my data intact. :P My gameplan (*please *correct me if any of this is wrong) is to: 1. Fake the ('new_app', '0001_initial') migration. 2. Make a new data migration depending on ('new_app', '0001_initial') and the ('old_app', '0005_...') that uses AlterModelTable <https://docs.djangoproject.com/en/1.7/ref/migration-operations/#altermodeltable> to rename the tables to their canonical names as would normally be created by the 0001_initial migration. 3. Fake the ('old_app', '0006_auto_delete_blah')migration. 4. Get rid of the Meta.db_table entries so my moved models just use the normal table names they're supposed to. Seems like it should get me to where I want to go. Am I smoking crack? Is this really that hard? Thanks! Andy. -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/63151710-6cde-429b-9af7-09de397704cd%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.