我目前正在忙于我的用户应用程序,并试图找到一种将新用户添加到不同预定义组的方法。我对其中一个组的sign_up视图如下:
def signup_view_zakelijk(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
group = Group.objects.get(name='zakelijk')
user.groups.add(group)
return redirect('user:login')
return render(request, 'user/signup.html', {'form': form})
else:
form = UserCreationForm()
return render(request, 'user/signup.html', {'form': form})
在保存表单之后保存该组。保存,所以我发出了post_save信号:
@receiver(post_save, sender=User)
def user_zakelijk_inactive(sender, instance, **kwargs):
group = Group.objects.values_list('name', flat=True)
print(group)
if group == 'zakelijk':
if instance._state.adding is True:
instance.is_active = False
else:
return
else:
return
我已经设置了print语句,以检查是否已打印用户组名称,并且该方法有效。但是默认情况下,新添加的用户不是不活动的。当我消除if group =='zakelijk'条件条件时,信号会正常工作,但也会对其他用户组执行(因此,每个新用户默认都处于非活动状态-仅在组'zakelijk'中需要此信号。
正常工作的信号代码:
@receiver(pre_save, sender=User)
def user_zakelijk_inactive(sender, instance, **kwargs):
if instance._state.adding is True:
instance.is_active = False
else:
return
有人有一些想法可以补充条件吗?
谢谢!
答案 0 :(得分:0)
因为,您正在与列表进行比较,我认为您不是从if语句传递过来的。我认为应该可以:
@receiver(post_save, sender=User)
def user_zakelijk_inactive(sender, instance, **kwargs):
group = instance.groups.values_list('name', flat=True)
print(group)
if 'zakelijk' in group:
if instance._state.adding is True:
instance.is_active = False
else:
return
else:
return
答案 1 :(得分:0)
首先,您正在尝试使用python / Django /数据库可以为您完成的事情。其次-您不保存:
# Only check if a group exists that is named "zakelijk"
if instance.groups.filter(name='zakelijk').exists():
instance.is_active = False
# One could use update_fields=['is_active'], but in practice
# user instances are not big entities.
instance.save()
有关详细信息,请参见the documentation。由于Group.name
是唯一字段,因此其性能与示例中的主键查找相当。