如何在Django特定数据库中为用户分配用户组?
Django多数据库下创建多对多关联记录的解决方案
当你从指定数据库获取User和Group对象后,调用user.groups.add()仍会使用默认数据库,这是因为多对多关系的管理器默认绑定默认数据库配置,和你获取对象时指定的数据库无关。
你可以通过以下两种方式解决这个问题:
方法一:直接操作中间表模型
Django为User和Group的多对多关系自动生成了中间表模型User.groups.through,你可以直接通过这个模型指定数据库来创建关联记录:
from django.contrib.auth.models import User, Group user = User.objects.using('db').get(pk=1) admin_group = Group.objects.using('db').get(name='admin') # 直接创建中间表记录,指定目标数据库 User.groups.through.objects.using('db').create(user_id=user.id, group_id=admin_group.id)
方法二:为多对多管理器指定数据库
调用多对多字段的using()方法,为管理器指定目标数据库后再执行add()操作:
from django.contrib.auth.models import User, Group user = User.objects.using('db').get(pk=1) admin_group = Group.objects.using('db').get(name='admin') # 为groups管理器指定数据库后添加关联 user.groups.using('db').add(admin_group)
两种方法都能将关联记录写入你指定的db数据库的auth_user_groups表中,方法二更贴合Django ORM的使用习惯,推荐优先使用。
内容的提问来源于stack exchange,提问作者kta
相关产品推荐
相关产品推荐

