南方不会为现有应用生成或应用迁移,并且需要进行迁移更改

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)

如你所见,南方认为无所事事.但是,最后三个模型是全新的,并且数据库中没有表.

有什么我可以做的,没有切换数据库让南方再次工作?

我无意为项目的其余部分手动编写迁移,但如果它有用,我会编写一个迁移.

Den*_*1.5 9

我猜你没有开始就遇到了麻烦./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移至第一次迁移并删除从迁移/数据库中删除的旧的第一次迁移


Mar*_*cin 2

来自肮脏黑客部门:

这个过程解决了我的问题,但它并不优雅。

(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:)

欢迎更好、更清晰的建议,也欢迎任何表明这种方法可能会破坏什么的迹象。