Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django设备的权限_Django_Fixtures - Fatal编程技术网

Django设备的权限

Django设备的权限,django,fixtures,Django,Fixtures,我正在为Django中的权限创建装置。我可以按需要的方式把它们装好。然而,我的问题是..假设我想为表auth_group_permissions加载一个fixture,我需要指定一个group_id和一个permission_id,不幸的是fixture不是处理这个问题的最佳方法。有没有更简单的方法以编程方式实现这一点?这样我就可以获得特定值的id,并将其填入?这通常是如何完成的?正确的解决方案是以与框架本身相同的方式创建权限 您应该连接到模块management.py或management/\

我正在为Django中的权限创建装置。我可以按需要的方式把它们装好。然而,我的问题是..假设我想为表
auth_group_permissions
加载一个fixture,我需要指定一个
group_id
和一个
permission_id
,不幸的是fixture不是处理这个问题的最佳方法。有没有更简单的方法以编程方式实现这一点?这样我就可以获得特定值的
id
,并将其填入?这通常是如何完成的?

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

您应该连接到模块
management.py
management/\uuuu init\uuuu.py
中的内置信号,并在其中创建权限。文档确实指出,响应
post_migrate
信号执行的任何工作都不应执行任何数据库模式更改,但您还应该注意,框架本身会创建权限以响应此信号


因此,我建议您查看一下
django.contrib.auth
应用程序的运行情况,看看应该如何完成它。

至少从django>=1.7开始,现在可以在fixture中存储权限,因为引入了“自然键”作为序列化选项

您可以在中阅读有关自然关键点的更多信息

文档中明确提到了自然关键点的用例,当

…对象由Django在数据库同步过程中自动创建,给定关系的主键不易预测;这将取决于迁移的执行方式和时间。这适用于自动生成对象的所有模型,尤其是权限、组和用户

因此,对于您的特定问题,关于
auth_group_permissions
,您可以使用以下语法转储设备:

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

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


然后,将以与任何其他装置相同的方式加载此装置,以便添加到@jonpa的注释中,如果您使用的是multitenant应用程序,并且您希望直接将装置保存到文件中,则可以执行以下操作:


python manage.py tenant\u命令dumpdata--schema=--natural-foreign--natural-primary-e auth.Permission--indent 4>/path/to/fixtures/fixtures.json

我应该把这个文件放在哪里?文档中说把它放在app_name/fixtures/…中。。。但权限是一个烘焙的应用程序。这里最好的做法是什么?我自己找到了答案。Django在
设置中查找fixture文件。fixture_DIRS
并进入
*appnames*/fixtures