【发布时间】:2015-12-03 11:43:47
【问题描述】:
我正在为我的项目进行某种重构,我依赖 django django.contrib.auth.models.Permission 模型。到目前为止,我使用 post_save 信号为每个新用户定义了权限,因此在创建用户时,我使用 user.user_permissions.add(the_permission) 分配他们的权限,这非常有效。
现在我想使用django.contrib.auth.models.Group 模型来分类用户应该拥有的权限。
这是我的代码:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
from django.contrib.auth.models import Group, Permission
def create_group(name, permissions):
group = Group.objects.create(name=name)
[group.permissions.add(permission) for permission in permissions]
def define_company_groups(sender, **kwargs):
permissions = [
Permission.objects.get(codename='add_mymodel'),
Permission.objects.get(codename='change_mymodel'),
]
create_group('managers', permissions)
class MyAppConfig(AppConfig):
name = 'players'
verbose_name = 'The players app'
def ready(self):
post_migrate.connect(define_company_groups, sender=self)
定义此代码后,我希望在调用./manage.py migrate 后应该触发此处理程序。但这并没有发生,我得到的只是:
Running post-migrate handlers for application players
Adding permission 'players | mymodel | Can add mymodel'
Adding permission 'companies | company | Can change mymodel'
Adding permission 'companies | company | Can delete company'
我找到了这篇 https://groups.google.com/forum/#!topic/django-developers/8MdaWtJp4VQ 文章,他们说我应该在名为 management.py 的文件中定义我的 post_migrate 处理程序,但它对我不起作用。
最后,我的问题是:我应该把这个代码放在我的自定义 post_migrate 信号的哪里?
【问题讨论】:
-
你如何告诉 Django 使用
MyAppConfig?在您的INSTALLED_APPS设置中? -
其实只要把应用名称加到
INSTALLED_APPS元组里,应该够用还是应该再添加一个配置?
标签: django django-signals django-migrations