django - 在项目初始化时创建项目级权限
问题描述
当我第一次manage.py migrate
在 Django 项目上运行时,我希望使用一些额外的权限来初始化数据库。我在这里看到这可以在应用程序级别的 apps.py 文件中完成。但是,我希望拥有的权限与整个项目有关,而不是与其中一个应用程序有关。
我的问题是:
- 定义项目级权限是否可以,或者权限是否始终是应用程序的一部分?
- 如果项目级别的权限很好,那么定义它们以便在项目初始化时创建它们的合适位置是什么?
解决方案
要创建权限,您需要一个ContentType
并且它们存在于应用程序中,因此您无法创建“项目级”权限。必须在某些应用程序中创建权限(一切都是应用程序),并且在您的项目中安装该应用程序后,您将能够引用整个项目中的权限。
由于权限与 ContentType(模型)相关,您可以在模型中创建权限,如下所示:
class SomeModelClass(models.Model):
# ...
class Meta:
permissions = (
("can_drive", "Can drive"),
("can_vote", "Can vote in elections"),
("can_drink", "Can drink alcohol"),
注意:所有模型都有4个默认权限
另一种创建权限的方法可以在某个地方以编程方式进行,可能是一个信号,一个自定义迁移......看看这里
推荐阅读
- ruby-on-rails - 设计多个模型,全名 = nil
- python - 继承配置文件上的 Django 信号
- excel - 当我尝试运行以下宏时,Active X 错误 429 无法创建对象
- r - 我们可以通过使用 qqplot(使用 R)找出分布是否遵循幂律分布?
- r - 将因子转换为日期而不产生 NA
- python-3.x - Tensorflow:尽管输入和内核有效,导入的操作总是导致“无”
- css - Bootstrap 主题中的 Alpha 通道和不透明度
- c# - 如何在 c# windows 应用程序中使用 FASTSMS 发送短信
- orm - Eiffel: Recommendation for ORM (Object Relationship Model) design
- angular - Angular 2+ path to static html