【发布时间】:2014-06-15 14:50:56
【问题描述】:
我有带有 is_instructor 字段的自定义用户模型,如果此值为 True,我想将用户添加到 Instructors 组。我试图通过覆盖 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)
...
但我也需要在模型中执行此操作以在管理员中保存用户时更新组。我的代码有什么问题?
【问题讨论】:
-
groups字段是否包含在ModelForm中的任何更改? -
不,它不包含在表单中。
-
向我们展示您正在使用的模型表单的定义。
标签: django django-orm