Django固定权限

KVI*_*ISH 9 django fixtures

我正在为Django创建权限夹具.我能够按照需要的方式加载它们.但是,我的问题是..我想为表加载一个夹具auth_group_permissions,我需要指定一个group_id和一个permission_id,不幸的是夹具不是处理这个的最好方法.是否有更简单的方法以编程方式执行此操作?这样我就可以获得id特定值并将它们填入?这通常是怎么做的?

jon*_*npa 12

至少Django> = 1.7,由于引入了"自然键"作为序列化选项,现在可以在灯具中存储权限.

您可以在Django序列化文档中阅读有关自然键的更多信息

文档明确提到自然键的用例是什么时候..

... Django在数据库同步过程中自动创建对象,给定关系的主键不容易预测; 它将取决于执行迁移的方式和时间.对于自动生成对象的所有模型都是如此,特别是包括权限,组和用户.

因此,对于您的具体问题,auth_group_permissions您可以使用以下语法转储夹具:

python manage.py dumpdata auth --natural-foreign --natural-primary -e auth.Permission

必须使用该-e标志显式排除auth_permissions表,因为该表由migrate命令填充,并且在加载fixture之前已经有数据.

然后,该装置将以与任何其他装置相同的方式装载


Fil*_*vić 9

正确的解决方案是以与框架本身相同的方式创建权限.

您应该连接到内置的post_migrate信号无论是模块中management.pymanagement/__init__.py有创建权限.文档确实说,响应post_migrate信号而执行的任何工作都不应执行任何数据库模式更改,但您还应注意框架本身会创建响应此信号的权限.

所以我建议您查看应用程序的管理模块,django.contrib.auth看看它应该如何完成.