2

我正在尝试将属于员工的用户添加到更改时的员工组中。我已经尝试过使用信号并在用户模型中重载保存,但它们似乎都不起作用。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)
4

1 回答 1

2

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

于 2013-02-21T11:37:05.510 回答