将用户添加到 django 中的组
Posted
技术标签:
【中文标题】将用户添加到 django 中的组【英文标题】:Adding a user to a group in django 【发布时间】:2011-09-11 10:22:59 【问题描述】:如何在 django 中按组名将用户添加到组中?
我可以这样做:
user.groups.add(1) # add by id
我该怎么做这样的事情:
user.groups.add(name='groupname') # add by name
【问题讨论】:
此解决方案版本是否敏感?当我尝试这是 django 1.8 时,我得到“意外关键字:名称” 【参考方案1】:使用 Group 模型和组名找到组,然后将用户添加到 user_set
from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name')
my_group.user_set.add(your_user)
【讨论】:
谢谢。在 django 文档中缺少或难以找到一些最基本的东西似乎很愚蠢 docs.djangoproject.com/en/dev/intro/tutorial01 'Playing with the API'部分有类似的例子 本教程非常有用,我的意思是我希望在 auth 下的文档部分中看到以编程方式创建组的部分。取而代之的是一个薄弱的段落:docs.djangoproject.com/en/1.3/topics/auth/#groups 我想这有助于记住身份验证模型只是常规模型,并且适用标准模型参考。 Django 文档中的user_set
在哪里?我在任何地方都找不到它
@MinhThai 如果未在字段上设置related_name
,则反向关系字段的默认值为<content_type>_set
。【参考方案2】:
这是在现代版本的 Django 中执行此操作的方法(在 Django 1.7 中测试):
from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)
【讨论】:
你也可以做Group.objects.get_by_natural_key('groupname')
,但它不会让它短路:D
@enchance 无论您需要这样做。可能在执行组分配的视图的代码中。【参考方案3】:
coredumperror 是对的,但我发现了一件我需要分享的东西
from django.contrib.auth.models import Group
# get_or_create return error due to
new_group = Group.objects.get_or_create(name = 'groupName')
print(type(new_group)) # return tuple
new_group = Group.objects.get_or_create(name = 'groupName')
user.groups.add(new_group) # new_group as tuple and it return error
# get() didn't return error due to
new_group = Group.objects.get(name = 'groupName')
print(type(new_group)) # return <class 'django.contrib.auth.models.Group'>
user = User.objects.get(username = 'username')
user.groups.add(new_group) # new_group as object and user is added
【讨论】:
这是因为 get_or_create 返回一个元组:(object, created)。new_group, created = Group.objects.get_or_create(name = 'groupName')
会工作
哦,太棒了以上是关于将用户添加到 django 中的组的主要内容,如果未能解决你的问题,请参考以下文章
Drupal Group 模块,以编程方式将用户添加到具有特定角色的组