关系“django_content_type”已经存在django

qoefvg9y  于 12个月前  发布在  Go
关注(0)|答案(2)|浏览(128)

我有个Django申请我试着更新模型。所以我做了一个
移民和迁徙但那不管用。所以我截断了django_migrations表。
我又做了一个python manage.py的makemigrations:

Migrations for 'zijnAdmin':
  zijnAdmin\migrations\0001_initial.py
    - Create model Category
    - Create model Animal

字符串
但当我现在尝试:python manage.py迁移。我收到以下错误:

Running migrations:
  Applying contenttypes.0001_initial...Traceback (most recent call last):
  File "C:\repos\DWL_backend\env\lib\site-packages\django\db\backends\utils.py", line 87, in _execute
    return self.cursor.execute(sql)
psycopg2.errors.DuplicateTable: relation "django_content_type" already exists


但我看到表格中做了改动。应用程序运行良好。但是当我做一个的时候我仍然得到这个警告:Pythonmanage.py服务192.168.1.135:8000

You have 25 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): accounts, admin, auth, authtoken, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
July 24, 2023 - 15:49:58
Django version 4.2.3, using settings 'zijn.settings.local'
Starting development server at http://192.168.1.135:8000/
Quit the server with CTRL-BREAK.


问题:如何解决此错误?

wmvff8tz

wmvff8tz1#

psycopg2.errors.DuplicateTable: relation "django_content_type" already exists

字符串
这个错误意味着“contenttypes”app正在尝试创建一个表已经存在于数据库中.
在执行任何操作之前,请先备份数据库,以便在出现任何错误时不会丢失数据,然后检查迁移的状态以查看是否有未应用的迁移:

python manage.py showmigrations


确保通过运行python manage.py migrate来应用迁移,如果在迁移过程中看到任何错误,则在运行migrate命令后解决这些错误使用showmigrations命令再次检查迁移状态,以确保所有迁移都已应用
如果你手动截断了django-migrations表,那么它一定会导致一些不一致的地方来解决这个问题,你可以尝试清除“zijnAdmin”应用的迁移,然后重新创建初始迁移:

python manage.py migrate zijnAdmin zero
python manage.py makemigrations zijnAdmin 
python manage.py migrate


由于您截断了django-migrations表,因此可能部分创建了django_content_type表以确保“contenttypes”应用的迁移运行良好,您可以尝试使用以下方法重新创建“django_content_type”表:

python manage.py migrate contenttypes --fake


--fake标志告诉django将迁移标记为已应用而不实际运行它
如果这些都不起作用,最好检查迁移文件、数据库状态,并检查对模型所做的任何更改
这些都是我脑海中浮现的事情。
我希望这对你有帮助。

juud5qan

juud5qan2#

由于您已经截断了迁移表,Django现在将尝试从头开始运行所有迁移。这也包括了Django库自己的一些迁移,用于创建user,auth,content_types表等。但由于这些表已经存在,您将收到错误,迁移无法完成。
解决这个问题的最简单的方法是删除整个数据库,并启动一个新的空白数据库。
除了django_content_typedjango_migrations之外,您可以备份每个表,并在新的数据库中恢复它。因此,当您运行python manage.py migrate命令时,迁移和content_type将被添加,其余的表可以从备份中导入。

相关问题