我正在尝试将属于员工的用户添加到员工组中进行更改。我已尝试使用信号和重载保存在用户模型中但它们似乎都不起作用。 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)
答案 0 :(得分:2)
如果您使用form(ModelForm)
,则消失群组的原因可能是form.save_m2m()
之后调用的user.save()
。例如,如果表单中有一个空的“组”字段,save_m2m
只会从您的用户中删除所有组。