我有一个迁移,它加载一个夹具,用于使用基本网站结构填充数据库(来自Loading initial data with Django 1.7 and data migrations )。迁移完成后,我的测试添加了一个(自定义)NewsPage。这会在/ admin / pages / add / website / newspage / 5 /中产生" IntegrityError 重复键值违反了唯一约束" wagtailcore_page_pkey" DETAIL:Key(id)=(3)已经存在。"当我通过管理界面添加页面时也会发生同样的情况。
有点怀疑pk = 3的页面是我的夹具中创建的第一个页面。另外两个pk已经由Wagtail的迁移创建了。
我已经读过有关迁移的灯具,而且似乎Postgres不会重置主键序列。我假设这也是我的问题。
我在Django: loaddata in migrations errors中找到了一个可能的解决方案,但失败了(使用"psycopg2.ProgrammingError: syntax error at or near "LINE 1: BEGIN;"
)。试图执行它的要点,我运行了sqlsequencereset管理命令(./manage.py sqlsequencereset wagtailcore myapp
),但我仍然得到错误,虽然现在id = 4。
编辑(当天):
如果我不遵循Loading initial data with Django 1.7 and data migrations中的示例,只需运行管理命令,就可以了:
def load_fixture(fixture_file):
"""Load a fixture."""
commands = StringIO()
call_command('loaddata', fixture_file, stdout=commands)
我不知道这种更简单方法的缺点是什么。
编辑2(同一天):
好的我知道,灯具将基于当前的模型状态,而不是迁移的状态,因此如果您的模型发生变化,它可能会中断。
我将整个事情转换为Python代码。这有效,并可能继续工作。今天我学会了:不要在迁移中加载装置。 (可惜,这将是一个很好的捷径。)