python - Django 迁移已应用,但我没有迁移文件
问题描述
向数据库应用了迁移,并且表“blacklist_id”存在(并填充了行。)
我想添加一个新模型并进行迁移,但是每当我调用 makemigrations 时,Django 都认为 blacklist_id 模型是新的并尝试为此进行迁移,这会导致错误。
我不想从服务器中删除表,因为它有数据 - 我能做什么?
解决方案
表是在没有最初创建迁移文件的情况下创建的,这有点奇怪,但我假设表是在 Django 之外创建的,或者文件可能被意外删除。
可能有帮助的解决方案是为此特定应用程序创建迁移,其中包含blacklist_id
(例如python manage.py makemigrations blacklist_app
:)
然后应用虚假迁移:python manage.py migrate --fake
这将简单地创建迁移文件,然后将其标记为已创建,而不实际创建对数据库的更改(更多信息在这里)
第二个解决方法(它不是那么漂亮)是创建另一个类,具有与表完全相同的字段blacklist_id
但名称不同(您可以在任何地方甚至在单独的应用程序中创建它),makemigrations
然后编辑迁移文件以更改表的名称,最后将这个迁移文件(或只是 的操作migrations.CreateModel(...)
)注入到您的应用程序中,最后migrate --fake
再次使用,因此它将被添加到您的迁移中,并标记为已执行,而您的数据库中没有任何更改。
推荐阅读
- c# - 为什么函数会在即时窗口中正确解析,而不是在 Visual Studio 文本编辑器中?
- python - 在 OpenCV 中显示坐标关键点
- r - 合并连续行,如果它们的数值使用 R 具有相同的运算符符号
- reactjs - 在 Crypto-Js 中获取 RSA 密钥
- amazon-web-services - 使用 Amazon Mechanical Turk 劳动力使用 Amazon Sagemaker Ground Truth 标记文本
- arrays - 如何在固定数量的部分中有不同的行?
- css - 禁用了属性“top”的 Material UI Drawer
- c# - 如何在 MVC5 的 For 循环中定义变量并在整个视图中使用它?
- java - Android:我来自哪个片段?
- mysql - Docker:将 mysql 映像添加到项目不起作用