Django 用户保存时组未更新
我正在尝试在用户信息更改时,把属于员工的用户添加到员工组里。我试过用信号和重写用户模型中的保存方法,但这两种方法都没有成功。请问Django在保存时有没有我不知道的限制呢?
下面是我尝试过的两个代码片段。用户是从AbstractUser继承的,并且使用了Django 1.5的新特性 AUTH_USER_MODEL = 'app.User',组是标准的认证组。
class User(AbstractUser):
def save(self, force_insert=False, force_update=False, **kwargs):
if self.is_staff:
if not self.groups.filter(name='staff').exists():
g = Group.objects.get(name='staff')
g.user_set.add(self)
else:
if self.groups.filter(name='staff').exists():
g = Group.objects.get(name='staff')
g.user_set.remove(self)
super(User, self).save(force_insert, force_update)
@receiver(post_save, sender=User)
def my_handler(sender, **kwargs):
user = kwargs['instance']
if user.is_staff:
if not user.groups.filter(name='staff').exists():
g = Group.objects.get(name='staff')
g.user_set.add(user)
else:
if user.groups.filter(name='staff').exists():
g = Group.objects.get(name='staff')
g.user_set.remove(user)
1 个回答
3
如果你使用的是 form(ModelForm)
,那么用户组消失的原因可能是因为在你调用 user.save()
之后,执行了 form.save_m2m()
。举个例子,如果你的表单里有一个空的“groups”字段,调用 save_m2m
就会把用户的所有组都删掉。