私のWebサイトでは、どのユーザーにも1つのグループしかありません。また、どのユーザーも自分のグループを変更できます。だからそれはによって作られています
user.groups.clear()
と
user.groups.add(new_group)
ただし、2つのSQLクエリ(DELETE、INSERT)があるため、効率的ではありません。UPDATEクエリだけでグループを変更するにはどうすればよいですか?
私のWebサイトでは、どのユーザーにも1つのグループしかありません。また、どのユーザーも自分のグループを変更できます。だからそれはによって作られています
user.groups.clear()
と
user.groups.add(new_group)
ただし、2つのSQLクエリ(DELETE、INSERT)があるため、効率的ではありません。UPDATEクエリだけでグループを変更するにはどうすればよいですか?
User
とGroup
を使用して相互に関連付けられます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>]
>>>
(読みやすくするために改行が追加されました)