我在恢复包含重命名表的Django(1.8.7)迁移方面遇到了问题.即使它似乎能够在Postgres中重命名它,它然后尝试使用旧表名添加约束.
这是追溯:
cursor.execute(sql, params) File "/Users/myworkspace/projects/xxx/venv/lib/python3.5/site-packages/django/db/backends/utils.py", line 79, in execute return super(CursorDebugWrapper, self).execute(sql, params) File "/Users/myworkspace/projects/xxx/venv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) File "/Users/myworkspace/projects/xxx/venv/lib/python3.5/site-packages/django/db/utils.py", line 97, in __exit__ six.reraise(dj_exc_type, dj_exc_value, traceback) File "/Users/myworkspace/projects/xxx/venv/lib/python3.5/site-packages/django/utils/six.py", line 658, in reraise raise value.with_traceback(tb) File "/Users/myworkspace/projects/xxx/venv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: relation "team_membershiprole" does not exist
如果你看一下它生成的SQL,
[...] ALTER TABLE "team_membershiprole" RENAME TO "team_leadershiprole"; [...] ALTER TABLE "team_leadershipteammember" ADD CONSTRAINT "team_l_role_id_xxx" FOREIGN KEY ("role_id") REFERENCES "team_membershiprole" ("id") DEFERRABLE INITIALLY DEFERRED; [...] COMMIT;
您可以看到有一个引用team_membershiprole
,即使该表不再存在(它已重命名).这是迁移代码:
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models, migrations class Migration(migrations.Migration): dependencies = [ ('core', '0023_xxx'), ('team', '0009_xxx2'), ] operations = [ migrations.CreateModel( name='TeamMembership', fields=[ ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), ('team', models.ForeignKey(related_name='members', to='team.Team')), ('member', models.ForeignKey(to='core.Member')), ], ), migrations.RenameModel( old_name='LeadershipRole', new_name='MembershipRole', ), migrations.RemoveField( model_name='leadershipteammember', name='team', ), migrations.RemoveField( model_name='leadershipteammember', name='member', ), migrations.RemoveField( model_name='leadershipteammember', name='role', ), migrations.DeleteModel( name='LeadershipTeamMember', ), migrations.AddField( model_name='teammembership', name='role', field=models.ForeignKey(to='team.MembershipRole'), ), ]
我知道这可能是一个Django迁移错误,但是有什么方法可以解决它吗?