将用户添加到 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 中的组的主要内容,如果未能解决你的问题,请参考以下文章

Django -- 条件登录重定向

Drupal Group 模块,以编程方式将用户添加到具有特定角色的组

Django:如何获取当前用户的组 ID

Drupal Group模块,以编程方式将用户添加到具有特定角色的组中

Django中不同的用户级别

组对象没有属性 user_set