保存用户时Django组不更新

时间:2013-02-11 14:54:22

标签: python django django-1.5

我正在尝试将属于员工的用户添加到员工组中进行更改。我已尝试使用信号和重载保存在用户模型中但它们似乎都不起作用。 django有什么限制我在保存时不知道吗?

以下是我尝试使用的两个代码段。用户继承自AbstractUser,并与新的Django 1.5功能AUTH_USER_MODEL ='app.User'一起使用,组是标准的auth组。

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 个答案:

答案 0 :(得分:2)

如果您使用form(ModelForm),则消失群组的原因可能是form.save_m2m()之后调用的user.save()。例如,如果表单中有一个空的“组”字段,save_m2m只会从您的用户中删除所有组。