Django - 当使用get_or_create自动创建用户时设置用户权限

43

Django 1.5,Python 2.6

在特定条件下,模型会自动创建一个用户:

User.objects.get_or_create(username=new_user_name, is_staff=True) 
u = User.objects.get(username=new_user_name)
u.set_password('temporary')

除了设置用户名、密码和is_staff状态外,我还想设置用户的权限-类似于:

u.user_permissions('Can view poll')
或者
u.set_permissions('Can change poll')

这种情况可行吗?谢谢!

3个回答

78

使用addremove方法:

 from django.contrib.auth.models import Permission
 permission = Permission.objects.get(name='Can view poll')
 u.user_permissions.add(permission)

4
最好使用“ 代码名称 ”而不是“名称”来获取权限。 - ImportError

27

Andrew M. Farrell的答案是正确的。我只增加了get_user_model()的使用以及一个完整的示例。

from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permission
u = get_user_model().objects.get(username=new_user_name)

要获得许可,您可以使用

permission = Permission.objects.get(name='Can view poll')
或者
permission = Permission.objects.get(codename='can_view_poll')

然后将其添加到用户权限集中

u.user_permissions.add(permission)

1
在第一个代码片段中,应该是u = get_user_model().objects.get(username=new_user_name)。Django文档参考链接:https://docs.djangoproject.com/en/4.1/topics/auth/customizing/#django.contrib.auth.get_user_model - Kapil Raj

0
使用代号字段:-
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Permissio

user = get_user_model().objects.get(name="test")
permission = Permission.objects.get(codename='view_poll')
user.user_permissions.add(permission)

#chack permission 
print(user.has_perm("<app_name).view_poll"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接