Django 用户保存时组未更新

3 投票
1 回答
1880 浏览
提问于 2025-04-17 15:30

我正在尝试在用户信息更改时,把属于员工的用户添加到员工组里。我试过用信号和重写用户模型中的保存方法,但这两种方法都没有成功。请问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 就会把用户的所有组都删掉。

撰写回答