Mar*_*cin 8 python migration django django-south
我正在使用South来生成和应用迁移,而不是自己管理.不幸的是,南方拒绝实际做任何事情.成绩单如下:
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py schemamigration mainapp --auto
You cannot use --auto on an app with no migrations. Try --initial.
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py schemamigration mainapp --initial
+ Added model mainapp.CompanyUK
+ Added model mainapp.CompanyName
+ Added model mainapp.Individual
+ Added model mainapp.Director
+ Added model mainapp.DirectorsIndividual
+ Added model mainapp.DirectorsCorporate
+ Added model mainapp.ShareCapitalClass
+ Added model mainapp.Member
+ Added model mainapp.MembersIndividual
+ Added model mainapp.MemberGeneric
+ Added model mainapp.CompanyManager
+ Added model mainapp.PendingRegistration
+ Added model mainapp.PendingAuthorisation
Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate mainapp
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py migrate mainapp
Running migrations for mainapp:
- Nothing to migrate.
- Loading initial data for mainapp.
No fixtures found.
[graffias:~/testing.tustincommercial.com/oneclickcos]$
Run Code Online (Sandbox Code Playgroud)
如你所见,南方认为无所事事.但是,最后三个模型是全新的,并且数据库中没有表.
有什么我可以做的,没有切换数据库让南方再次工作?
我无意为项目的其余部分手动编写迁移,但如果它有用,我会编写一个迁移.
我猜你没有开始就遇到了麻烦./manage.py convert_to_south mainapp.也许你可以这样做:
(1)让南方相信你没有进行第一次迁移,所以归零
./manage.py migrate --fake mainapp zero
(2)迁移到第一次迁移.
./manage.py migrate mainapp
但是对于我能提出的问题,你已经在没有南方的数据库中创建了一些模型,否则你就不必使用了--initial.如果是这样,它可能会抱怨已存在的列.
您可以通过以下方式更改此情况
(1)通过删除mainapp/migrations/0001_initial.py来消除第一个模式迁移.你不需要直接摆弄南数据库表,--delete-ghost-migrations就会照顾好这一点.
(2)./manage.py syncdbSouth希望数据库与模型同步.
(3)./manage.py convert_to_south mainapp实际让南方处理数据库和迁移.
(4)./manage.py migrate --delete-ghost-migrations mainapp移至第一次迁移并删除从迁移/数据库中删除的旧的第一次迁移
来自肮脏黑客部门:
这个过程解决了我的问题,但它并不优雅。
(1) 删除受影响应用程序中的所有迁移 ( rm mainapp/migrations/*)
(2) 删除 models.py,并将其替换为空文件 ( mv mainapp/models.py .; rm mainapp/*.pyc; touch mainapp/models.py)
(3) 生成不执行任何操作的初始迁移 ( python ./manage.py schemamigration mainapp --initial),并应用它 ( python ./manage.py migrate mainapp)
(4) 恢复模型,并生成迁移,这将重新创建所有内容 ( rm mainapp/models.py; mv models.py mainapp/; python ./manage.py schemamigration mainapp --auto)
(5) 在运行新的迁移之前,对其进行编辑以注释掉所有不是真正新更改的更改。或者,运行它,让它在实际存在的表上失败,然后注释掉所有内容。
(6) 应用您的迁移,将南方置于类似正常状态的状态(如果您遵循我在步骤 (5) 中推荐的课程,则执行您的更改python ./manage.py migrate mainapp:)
欢迎更好、更清晰的建议,也欢迎任何表明这种方法可能会破坏什么的迹象。