gpt4 book ai didi

django - 如何在不删除记录的情况下更改用户组

转载 作者:行者123 更新时间:2023-12-02 17:48:56 24 4
gpt4 key购买 nike

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

user.groups.clear() 

user.groups.add(new_group)

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

最佳答案

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>]
>>>

(为便于阅读而添加的换行符)

关于django - 如何在不删除记录的情况下更改用户组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11007157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com