如何在没有删除记录的情况下更改用户组

时间:2012-06-13 01:39:49

标签: django

在我的网站上,任何用户只有一个群组。任何用户都可以改变他的小组。 所以它是由

制作的
user.groups.clear() 

user.groups.add(new_group)

但它效率不高,因为有两个SQL查询:DELETE,INSERT。 如何通过UPDATE查询更改组?

1 个答案:

答案 0 :(得分:3)

UserGroup使用ManyToManyField相互关联。这意味着存在与两个实体相关的交集表,如果您没有指定要映射到它的模型(使用through属性),Django会为您创建一个。查看django.contrib.auth.models的来源,我发现情况就是这样。

幸运的是,您可以使用管理器的through属性访问该中间模型(在本例中为User.groups.through)。然后就像任何常规模型一样使用它。例如:

>>> alice = User.objects.create_user('alice', 'alice@example.com', 'alicepw')
>>> employee = Group.objects.create(name='employee')
>>> manager = Group.objects.create(name='manager')

>>> alice.groups.add(employee)
>>> alice.groups.all()
[<Group: employee>]

>>> alice_group = User.groups.through.objects.get(user=alice)
>>> alice_group
<User_groups: User_groups object>
>>> alice_group.group = manager
>>> alice_group.save()

>>> alice.groups.all()
[<Group: manager>]
>>>

(为了便于阅读而添加了新行)