运行python manage.py migrate
时遇到此错误:
django.db.migrations.exceptions.InconsistentMigrationHistory: Migration
<appname>.0016_auto_<date2>_<time2> is applied before its dependency
<appname>.0001_squashed_0015_auto_<date1>_<time1>
运行showmigrations返回:
<appname>
[X] 0001_squashed_0015_auto_<date1>_<time1> (15 squashed migrations)
[X] 0016_auto_<date2>_<time2>
[ ] 0017_<modelname>_squashed_0019_auto_<date3>_<time3> (3 squashed migrations)
我昨天尝试了django-extensions,当我运行一些直接的SQL查询并且使用git重置后,它都搞砸了。我还在学习迁移,所以我不明白什么是错的,因为在我看来这两个迁移都已经应用了。
感谢您的帮助!
答案 0 :(得分:8)
您已经压缩了迁移,因此0016_auto_<date2>_<time2>
所拥有的依赖项之一现在是新创建的压缩迁移的一部分。与此同时,0016_auto_<date2>_<time2>
已经运行,现在您正在尝试运行压缩的迁移。
我个人不知道是否有任何方法可以自动修复此问题。您需要自己解决问题。如果您有版本控制,请还原这些更改并尝试重新考虑如何压缩迁移而不影响旧迁移。
答案 1 :(得分:0)
运行此python manage.py dbshell
INSERT INTO public.django_migrations(app, name, applied)
VALUES ('YOUR_APP_NAME, '0017_<modelname>_squashed_0019_auto_<date3>_<time3>', now());
,你应该没事。如果您的迁移对数据库的更改很大,那么恐怕修复起来就不那么容易了。
答案 2 :(得分:0)
然后再次运行python manage.py进行迁移,应该将其修复。
答案 3 :(得分:0)
这对我有用。感谢我的同事在网上搜索了多个小时后分享的这些知识。
启动数据库外壳程序
public static void main(String[] args) throws IOException {
createFileDude();
}
public static void createFileDude() throws IOException {
File file = new File("C:\\Users\\User\\Desktop\\Test.txt");
try {
System.out.println("Create file>> " + file.createNewFile());
} catch (IOException e) {
e.printStackTrace();
throw e;
}
}
使用所需的数据库。如果您不知道,请运行“显示数据库”
python manage.py dbshell
检索应用程序下的所有迁移
mysql>use <database_name>;
您将在所有迁移旁边看到带有ID的输出。查看您要删除的迁移。假设ID为361
mysql> select * from django_migrations where app='<app>';
答案 4 :(得分:0)
您需要伪造迁移并再次迁移 只需确保您已从数据中备份,因为再次迁移时,您需要删除apps表。 确保您查看节目迁移并按其顺序迁移未迁移的应用
答案 5 :(得分:0)
我在2020年使用Django 3.0.6遇到了同样的问题。 我尝试了所有相关答案,但均未成功。因此,我进入数据库并删除了所有表。如果您做了很多工作,则必须导出相关表。我主要删除数据库中的Django文件。然后,运行:
python manage.py makemigrations <my-app>
并且:
python manage.py migrate
导出相关表格(如果有)。
答案 6 :(得分:0)
然后运行makemigrations
和migrate
命令
答案 7 :(得分:0)
通过以下步骤(自定义用户模型),我已经解决了这个问题:
删除此文件: migrations \ 0001_initial.py
删除此: db.sqlite3
将此代码放入settings.py中: AUTH_USER_MODEL ='users.CustomUser'
然后先执行(makemigrations),然后再执行(migrate)
运行服务器..问题已解决:)
我使用了此链接,可以帮助我解决依赖问题:
https://docs.djangoproject.com/en/3.1/topics/auth/customizing/
由于Django的可互换模型具有动态依赖功能,因此AUTH_USER_MODEL引用的模型必须在其应用的首次迁移中创建(通常称为0001_initial);否则,您将遇到依赖性问题。
此外,在运行迁移时,由于动态依赖关系,Django无法自动中断依赖关系循环,因此您可能会遇到CircularDependencyError。如果看到此错误,则应通过将用户模型所依赖的模型移动到第二个迁移中来中断循环。 (您可以尝试制作两个彼此具有ForeignKey的普通模型,并查看makemigrations如何解决该循环依赖关系,如果您想了解它通常如何完成的话。)
答案 8 :(得分:-4)
删除迁移文件。
运行:
python manage.py migrate
python manage.py makemigrations
python manage.py migrate
python manage.pyrunserver