我正在使用webapp,其中域的管理员要执行的任务是注册与其域相同的其他用户。当我单击授权时,无法授权用户。
这是我的 forms.py :
class AuthUserCheckbox(forms.Form):
choice = forms.MultipleChoiceField(choices=[], widget=forms.CheckboxSelectMultiple, required=True)
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
user_email = self.user.email.split('@')[1]
super(AuthUserCheckbox, self).__init__(*args, **kwargs)
self.fields['choice'] = forms.MultipleChoiceField(choices=[(i.id, i.email)
for i in User.objects.filter(is_active=False, email__icontains=user_email)])
这是我的 views.py :
@login_required
def authorize_final(request):
if request.method == 'POST':
authorize_users = AuthUserCheckbox(data=request.POST, user=request.user)
if authorize_users.is_valid():
email_list = authorize_users.cleaned_data.get('choice[]')
for i in email_list:
if i.is_active == False:
i.is_active = True
return HttpResponse('<h3>Authorized successfully</h1>')
else:
return HttpResponse('<h3>Authorization failed</h3>')
else:
return HttpResponse('<h3>Post request error</h3>')
答案 0 :(得分:0)
尝试
authorize_users = AuthUserCheckbox(data=request.POST, user=request.user.username)
答案 1 :(得分:0)
代码存在一些问题。
首先,您遇到的错误是由于语法问题。另外,您将User.objects.all()
视为普通列表,不需要使用。您可以像以下代码一样直接使用queryset:
user_email = self.user.email.split('@')[1]
super(AuthUserCheckbox, self).__init__(*args, **kwargs)
self.fields['choice'].choices = [(i.id, i.email) for i in User.objects.filter(is_active=False, email__icontains=user_email)])
在这里,我直接查询用户的电子邮件中是否存在电子邮件域,并检查用户是否为活动用户或节点。
第二,在视图中,您可以像这样访问表单cleaned data中的选项:
authorize_users = AuthUserCheckbox(data=request.POST, user=request.user)
if authorize_users.is_valid():
email_list = authorize_users.cleaned_data.get('choice')
User.objects.filter(pk__in=email_list).update(active=True)