Django无法立即获得群组的许可

时间:2016-02-16 12:04:34

标签: django python-3.x

我发现用户无法从group获取权限。为此,我必须再次获取用户实例。

我使用 Python 3.4.3 Django 1.8

以下是我使用控制台的代码:

>>> from django.contrib.auth.models import User
>>> from django.contrib.auth.models import Group
>>> from django.contrib.auth.models import Permission

>>> peter = User.objects.create_user('peter', 'peter@example.com', 'peter')

>>> permission = Permission.objects.get(codename='add_user')

>>> admin = Group(name='admin')
>>> admin.save()
>>> admin.permissions.add(permission)

>>> peter.get_all_permissions()
set()
>>> peter.groups.add(admin)
>>> peter.get_all_permissions()
set()

>>> peter = User.objects.get(username='peter')
>>> peter.get_all_permissions()
{'auth.add_user'}

我想知道为什么,有没有办法刷新群组的权限?

1 个答案:

答案 0 :(得分:1)

create_user将用户模型保存到数据库并返回相同的模型。如果您更改了该用户的权限,则更改将反映在数据库中,但不会反映在您在shell中的缓存模型中。您必须从数据库中重新获取用户才能显示这些权限更改。

refresh_from_db无法工作的原因是它只从数据库重新加载模型的直接字段,而不是其他依赖于数据库的值。