无法更改Djang用户的活动状态

2024-10-02 00:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个webapp,其中一个域的管理员负责注册与他相同域的其他用户。单击“授权”时无法授权用户。你知道吗

这是我的表单.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)])

这是我的视图.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>')

Tags: selfreturnifisemailrequestformsusers
2条回答

试试这个

 authorize_users = AuthUserCheckbox(data=request.POST, user=request.user.username)

代码有一些问题。你知道吗

首先,你得到的错误是由于语法问题。另外,您将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)

相关问题 更多 >

    热门问题