【发布时间】: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 时,我得到“意外关键字:名称”
如何在 django 中按组名将用户添加到组中?
我可以这样做:
user.groups.add(1) # add by id
我该怎么做这样的事情:
user.groups.add(name='groupname') # add by name
【问题讨论】:
使用 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)
【讨论】:
user_set 在哪里?我在任何地方都找不到它
related_name,则反向关系字段的默认值为<content_type>_set。
这是在现代版本的 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
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
【讨论】:
new_group, created = Group.objects.get_or_create(name = 'groupName') 会工作