我有is_instructor
字段的自定义用户模型,如果此值为True
,则希望将用户添加到教师组。我尝试通过覆盖save()方法和使用信号来做到这一点,但它们都没有工作。
这不起作用:
class CustomUser(AbstractBaseUser, PermissionsMixin):
...
is_instructor = models.BooleanField(_('instructor'), default=False)
...
def save(self, *args, **kwargs):
...
super(CustomUser, self).save(*args, **kwargs)
ins_group = Group.objects.get(name='Instructors')
if self.is_instructor:
self.groups.add(ins_group) # No effect
else:
self.groups.remove(ins_group) # No effect
使用相同信号(不起作用):
@receiver(post_save, sender=CustomUser)
def update_groups(sender, instance, **kwargs):
ins_group = Group.objects.get(name='Instructors')
if instance.is_instructor:
instance.groups.add(ins_group) # No effect
else:
instance.groups.remove(ins_group) # No effect
虽然它在视图中正常工作:
def update_user(request, pk, template='userprofile/customuser_form.html'):
...
profile = get_object_or_404(get_user_model(), id=pk)
if request.method == 'POST':
form = form_class(request.POST, instance=profile)
if form.is_valid():
u = form.save(commit=False)
ins = Group.objects.get(name='Instructors')
if u.is_instructor:
u.groups.add(ins) # Works
else:
u.groups.remove(ins) # Works
u.save()
redirect('userprofile:detail', u.pk)
...
但我还需要在模型中进行更新,以便在管理员中保存用户时更新组。我的代码出了什么问题?
答案 0 :(得分:0)
save()不适用于新实例,因为您在调用super之前尝试修改关系。
可能根本无法加载信号。你把它放进了哪个模块(models.py
希望?)。检查update_groups
是否在您预期的时候被调用。
作为旁注:在处理信号时,请记住尊重raw
关键字参数。