Pab*_*lav 3 python django postgresql wagtail
这个问题之前曾在这里被问过,但针对的是不同的场景。
\n\n我正在开发Django/Wagtail项目。在某些时候,我必须修改模型并添加一些字段。
\n\n我不小心添加了一个标志unique=True我不小心为新字段这边走:
\n\ntitle = models.CharField(max_length=100, unique=True, blank=True, null=True, verbose_name=_(\'Category Title\'))\nRun Code Online (Sandbox Code Playgroud)\n\n在进行迁移和迁移时,它喊出了这个问题:
\n\n\n\n然后我意识到错误,删除了unique=True并将其保留为这样:
\n\ntitle = models.CharField(max_length=100, blank=True, null=True, verbose_name=_(\'Category Title\'))\nRun Code Online (Sandbox Code Playgroud)\n\n我进行了迁移并再次迁移,希望问题能够消失。但是我遇到了同样的问题。
\n\n我该如何解决这个问题?
\n\n这是最后一次迁移:
\n\nclass 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 ]\nRun 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>\nRun Code Online (Sandbox Code Playgroud)\n
回溯告诉您,当您尝试运行迁移 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)
因此,删除这些迁移应该是安全的(为了安全起见,您可能需要备份它们)。然后,您可以重新运行makemigrations并migrate重新创建并运行新的迁移。