gle*_*enc 9 django data-migration django-south
我并不是100%确定我这样做是正确的,但我认为我发现了一个问题,即auth.Permission当你从头开始初始化数据库时,很快就没有创建对象以便迁移使用它们.
重要细节:
我正在尝试从头开始初始化Django DB ./manage.py syncdb --migrate --noinput
我的链中有11次迁移
第一次迁移创建了一个名为的新模型 myapp.CompanyAccount
第9次迁移尝试使用以下方式获取权限myapp.change_companyaccount:
p = orm[ "auth.Permission" ].objects.get( codename = "change_companyaccount" )
此时,会引发异常:
django.contrib.auth.models.DoesNotExist: Permission matching query does not exist
我假设在第一次迁移完成时创建了为每个对象定义的默认权限(根据http://docs.djangoproject.com/en/dev/topics/auth/#default-permissions) ,但它们似乎并非如此.如果我在异常之后重新运行迁移,它会第二次运行,因为显然现在存在权限,并且第9次迁移可以无错误地执行.
在第9次迁移运行之前的某个时间,是否可以做任何事情来"冲洗"所有内容,以便整个过程可以在一次通过中运行而不会挽救?
感谢您提供任何帮助/建议.
编辑:为了回应下面的John的评论,我发现以下命令行序列将起作用:
./manage.py syncdb (这会初始化默认的Django表)./manage.py migrate myapp 0001 (这会导致创建CompanyAccount表)./manage.py migrate myapp (这一直迁移到最终没有错误)不幸的是,跳过上面的步骤#2意味着你在0009迁移中得到了相同的异常,这告诉我我原来的怀疑是正确的,新模型的默认权限不是立即由South创建的,并且在某种程度上只是在推送到数据库时整个迁移链完成.
这比我的情况要好(我现在至少避免例外)但是我仍然需要手动分割围绕创建新模型的迁移,后者迁移可能需要触及权限,因此这不是一个完整的解.
事实证明,答案是db.send_pending_create_signals()在您尝试访问默认权限之前在某个时刻手动调用,因为South只会在此过程中很晚才执行此"刷新"步骤.感谢来自南方的Andrew Godwin在南方邮件列表上回复此信息:
http://groups.google.com/group/south-users/browse_thread/thread/1de2219fe4f35959
| 归档时间: |
|
| 查看次数: |
2384 次 |
| 最近记录: |