为什么django-guardian的assign_perm给我一个DoesNotExist错误?

时间:2013-09-24 14:25:59

标签: django django-guardian

我正在尝试使用django-guardian为任务分配用户权限,但我收到错误。

在task / models.py的Task类中,我有:

class Meta(BaseModel.Meta):
    permissions = (
        ("task_view", "Person can view task details"),
    )

当我进入

  

python manage.py shell

并尝试分配这些权限,它会引发错误。

以下是我的尝试:

from profiles.models import SiteUser
from task.models import *
from guardian.shortcuts import assign_perm
siteuser = SiteUser.objects.get(id=2454)
task = Task.objects.get(name="asdf")
assign_perm('task_view', siteuser, task)

这是错误:

  

DoesNotExist:权限匹配查询不存在。

有谁知道我做错了什么?我想我遵循了django-guardian帮助中的指示,但也许我错过了什么?

2 个答案:

答案 0 :(得分:2)

好的,看起来您必须先执行syncdb才能分配权限:

python manage.py syncdb --all

答案 1 :(得分:0)

跟随Gregory Goltsov发表评论,在Django 1.8中,我最终以编程方式调用django-extensions update_permissions,当我执行post_migration

时我打电话
from django.core import management
from guardian.shortcuts import assign_perm
from django.contrib.auth.models import Permission, Group

def create_user_groups(sender, **kwargs):
    management.call_command('update_permissions')
    group, created = Group.objects.get_or_create(name='personal')
    if created:
        assign_perm('core.view_savedlocation', group)

    group, created = Group.objects.get_or_create(name='business')
    if created:
        assign_perm('core.add_savedlocation', group)
        assign_perm('core.change_savedlocation', group)
        assign_perm('core.view_savedlocation', group)
        assign_perm('core.delete_savedlocation', group)

到目前为止,在将它们分配给我想要的群组之前,我拥有所需的所有权限。