我正在使用django 1.9.6.我最近删除了我的迁移和跑migrate --run-syncdb和makemigrations my_app.今天我在我的一个模型中添加了一个新字段:
models.py:
value = models.PositiveSmallIntegerField(null=True)
Run Code Online (Sandbox Code Playgroud)
我尝试迁移更改,但未makemigrations检测到更改.它只是开发版本,因此我可以重新同步(我不必保留数据),但--run-syncdb再次运行也不会检测到它.
为什么不迁移?
小智 19
删除除__init__之外的所有过去的迁移文件和__pycache__文件:
python manage.py makemigrations yourApp
Run Code Online (Sandbox Code Playgroud)
之后,确保db与model.py中的代码相同(删除新更改)并运行下一行:
python manage.py migrate --fake-initial
Run Code Online (Sandbox Code Playgroud)
现在在model.py中添加所有更改并运行下一行:
python manage.py makemigrations
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
最诚挚的问候,克里斯蒂安
dot*_*mly 11
你不应该删除迁移,你应该压缩它们.如果您只是删除了可能搞砸了的文件,最简单的恢复方法是重新同步代码以恢复文件.一个更复杂的路线是从django_migrations表中删除所有记录并从头开始重新启动迁移,但是有更多的步骤/问题比我真正可以进入并且我不推荐它.
makemigrations未检测到更改的原因可能是因为该应用程序中没有迁移文件夹.如果您运行python manage.py makemigrations your_app --initial它可能会检测并生成迁移,或者由于文件和django_migrations表的不同而可能会发生迁移.
--run-syncdb当您不关心数据时,通常在实际部署之前,该命令很棒,但是一旦开始使用迁移,就不应再使用该--run-syncdb命令了.例如,在初始开发期间,这里是我运行每个模型更改而不是处理迁移的代码:
dropdb mydb && createdb mydb && python manage.py migrate --run-syncdb && python manage.py loaddata initial
Run Code Online (Sandbox Code Playgroud)
我将所有初始数据存储在fixtures文件中,该命令会清除整个数据库,--run-syncdb重建模式,并在跳过实际迁移文件时加载初始数据.
因此,如果您不关心任何数据,或者可以轻松地将其移动到夹具,那么您可以删除并重新创建数据库.然后,您可以自由删除所有迁移文件夹,并且可以使用上面的命令,直到您上线并需要转移到使用迁移.
DJANGO的最新消息1.11
我开始使用Django 1.11,并注意到如果您对框架模型有依赖性并且实际上没有迁移,则测试框架可能会失败.这是我用来擦除所有内容并在开发过程中重新开始的新命令.
dropdb yourdb && createdb yourdb && find . -name "migrations" -type d -prune -exec rm -rf {} \; && python manage.py makemigrations name every app you use seperated by space && python manage.py migrate && python manage.py loaddata initial
我把它放在builddb.sh项目的根目录(在manage.py旁边),这样我就可以运行了./builddb.sh.务必在部署时删除它,这样就不会发生意外!
小智 10
我遇到过同样的问题.我意识到我在模型上定义了一个属性,其名称与我试图在模型上添加的字段相同.确保模型没有与您尝试添加的字段同名的模型属性/方法.
| 归档时间: |
|
| 查看次数: |
15369 次 |
| 最近记录: |