8

我正在构建一个应用程序,假设存在某些组及其工作流程的权限。例如,“会员”可以登录应用程序并查看和编辑他们的个人数据,但看不到通常会显示在同一屏幕上的注释。“员工”可以查看这些笔记并创建或编辑自己的笔记,但只有“会员管理员”可以删除或编辑任何人的笔记。

我的问题是为这个应用程序引导数据。我可以为组创建 JSON 夹具数据,但是我必须对 PK 进行硬编码,这似乎是一种不好的做法(如果我想使用的第三方应用程序做了同样的事情并且发生了冲突怎么办?)问题是权限 - 我必须将 PK 添加到权限中,而权限又会将 PK 添加到其内容类型中。

我已经阅读了有关使用 post_syncdb 挂钩以更加程序化的方式添加初始数据的信息,我希望这将帮助我解决硬编码的 PK 问题。但是我想知道这是否是解决这个问题的最佳解决方案,或者我是否在这里“滥用”了 Django Group 和 Permission 概念,并且应该做其他事情,比如创建新模型或只是放置标志(比如“ is_member_manager") 在我的用户配置文件模型等

4

1 回答 1

0

通常创建一个以init管理命令命名的应用程序initialize,我将所有代码放在那里以引导应用程序。这允许您:

  • 如果您使用部署工具(我使用 [Ansible](http://www.ansible.com/home,bat可以是 amy 工具 Fabric、bash ...),您可以自动化该过程并init从已安装的应用程序中删除该应用程序配置后(首次安装)

或者

  • 检查命令是否已经启动以跳过该过程(Group.objects.all().exists()?)

(或两者)

我发现这个解决方案非常易于维护,并且在任何情况下都足够强大。

post_syncdbpost_migrate在 djang 1.7 中)不是每次迁移所要求的解决方案

如果您只需要加载数据和/或创建记录(即组/管理员...),恕我直言,最好的解决方案是使用数据迁移](https://docs.djangoproject.com/en/1.7/topics/migrations/#数据迁移

于 2014-12-11T18:00:51.393 回答