Django 'Key(field)=() 重复'

Pab*_*lav 3 python django postgresql wagtail

这个问题之前曾在这里被问过,但针对的是不同的场景。

\n\n

我正在开发Django/Wagtail项目。在某些时候,我必须修改模型并添加一些字段。

\n\n

我不小心添加了一个标志unique=True我不小心为新字段这边走:

\n\n
title = models.CharField(max_length=100, unique=True, blank=True, null=True, verbose_name=_(\'Category Title\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

在进行迁移和迁移时,它喊出了这个问题:

\n\n

在此输入图像描述

\n\n

然后我意识到错误,删除了unique=True并将其保留为这样:

\n\n
title = models.CharField(max_length=100, blank=True, null=True, verbose_name=_(\'Category Title\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我进行了迁移并再次迁移,希望问题能够消失。但是我遇到了同样的问题。

\n\n

我该如何解决这个问题?

\n\n

这是最后一次迁移:

\n\n
class Migration(migrations.Migration):\n\n    dependencies = [\n        (\'distributed\', \'0029_remove_blogcategory_title\'),\n    ]\n\n    operations = [\n        migrations.AddField(\n            model_name=\'blogcategory\',\n            name=\'title\',\n            field=models.CharField(blank=True, max_length=100, null=True, verbose_name=\'Category Title\'),\n        ),\n    ]\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是痕迹:

\n\n
    Microsoft Windows [Versi\xc3\xb3n 6.1.7600]\nCopyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.\n\nC:\\Windows\\system32>cd C:/\n\nC:\\>cd distributed\n\nC:\\distributed>cd distributed\n\nC:\\distributed\\distributed>python manage.py runserver\nPerforming system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have 6 unapplied migration(s). Your project may not work properly until you\napply the migrations for app(s): distributed.\nRun \'python manage.py migrate\' to apply them.\nApril 26, 2017 - 12:40:45\nDjango version 1.10.7, using settings \'genesis.settings.dev\'\nStarting development server at http://127.0.0.1:8000/\nQuit the server with CTRL-BREAK.\n^C\nC:\\distributed\\distributed>python manage.py migrate\nOperations to perform:\n  Apply all migrations: admin, auth, contenttypes, distributed, otp_static, otp_\ntotp, otp_yubikey, sessions, sites, taggit, two_factor, wagtailadmin, wagtailcor\ne, wagtaildocs, wagtailembeds, wagtailforms, wagtailimages, wagtailredirects, wa\ngtailsearch, wagtailusers\nRunning migrations:\n  Applying distributed.0025_auto_20170425_1827...Traceback (most recent call las\nt):\n  File "manage.py", line 11, in <module>\n    execute_from_command_line(sys.argv)\n  File "C:\\Python27\\lib\\site-packages\\django\\core\\management\\__init__.py", line\n367, in execute_from_command_line\n    utility.execute()\n  File "C:\\Python27\\lib\\site-packages\\django\\core\\management\\__init__.py", line\n359, in execute\n    self.fetch_command(subcommand).run_from_argv(self.argv)\n  File "C:\\Python27\\lib\\site-packages\\django\\core\\management\\base.py", line 294,\n in run_from_argv\n    self.execute(*args, **cmd_options)\n  File "C:\\Python27\\lib\\site-packages\\django\\core\\management\\base.py", line 345,\n in execute\n    output = self.handle(*args, **options)\n  File "C:\\Python27\\lib\\site-packages\\django\\core\\management\\commands\\migrate.py\n", line 204, in handle\n    fake_initial=fake_initial,\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\migrations\\executor.py", line 11\n5, in migrate\n    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_i\nnitial=fake_initial)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\migrations\\executor.py", line 14\n5, in _migrate_all_forwards\n    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_\ninitial)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\migrations\\executor.py", line 24\n4, in apply_migration\n    state = migration.apply(state, schema_editor)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\migrations\\migration.py", line 1\n29, in apply\n    operation.database_forwards(self.app_label, schema_editor, old_state, projec\nt_state)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\migrations\\operations\\fields.py"\n, line 84, in database_forwards\n    field,\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\postgresql\\schema.py",\nline 21, in add_field\n    super(DatabaseSchemaEditor, self).add_field(model, field)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\base\\schema.py", line 4\n09, in add_field\n    self.execute(sql, params)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\base\\schema.py", line 1\n12, in execute\n    cursor.execute(sql, params)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\utils.py", line 79, in\nexecute\n    return super(CursorDebugWrapper, self).execute(sql, params)\n  File "C:\\Python27\\lib\\site-packages\\cachalot\\monkey_patch.py", line 111, in in\nner\n    out = original(cursor, sql, *args, **kwargs)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\utils.py", line 64, in\nexecute\n    return self.cursor.execute(sql, params)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\utils.py", line 94, in __exit__\n    six.reraise(dj_exc_type, dj_exc_value, traceback)\n  File "C:\\Python27\\lib\\site-packages\\django\\db\\backends\\utils.py", line 64, in\nexecute\n    return self.cursor.execute(sql, params)\ndjango.db.utils.IntegrityError: could not create unique index "distributed_blogc\nategory_title_key"\nDETAIL:  Key (title)=() is duplicated.\n\n\nC:\\distributed\\distributed>\n
Run Code Online (Sandbox Code Playgroud)\n

Ala*_*air 7

回溯告诉您,当您尝试运行迁移 0025 时发生错误。

的输出python manage.py showmigrations告诉您迁移 0025-0030 尚未应用。

[X] 0022_auto_20170109_1620
[X] 0023_auto_20170109_1621
[X] 0024_auto_20170112_1933
[ ] 0025_auto_20170425_1827
[ ] 0026_auto_20170425_1829
[ ] 0027_auto_20170425_1839
[ ] 0028_auto_20170425_1840
[ ] 0029_remove_blogcategory_title
[ ] 0030_blogcategory_title
Run Code Online (Sandbox Code Playgroud)

因此,删除这些迁移应该是安全的(为了安全起见,您可能需要备份它们)。然后,您可以重新运行makemigrationsmigrate重新创建并运行新的迁移。