必须使用 UserLoginForm 实例作为第一个参数调用未绑定的方法 is_valid() (什么都没有)

约瑟夫·大卫

大家好,任何有想法的人都可以帮助解决这个错误,我正在使用 Django 框架来开发一个使用基于类的视图的简单应用程序。

这是我的查看代码:

class OpenLogin(FormView):
    template_name = 'signin.html'
    form_class = UserLoginForm

    def post(self, request, *args, **kwargs):
        form = self.form_class
        next_url = self.request.GET.get('next')
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')

            obj = authenticate(username=username, password=password)
            if obj is not None:
                if obj.is_active():
                    login(self.request, obj)
                    if next_url is not None:
                        return HttpResponseRedirect(next_url)
                    else:
                        return HttpResponseRedirect(reverse('index'))
                else:
                    messages.error(self.request, 'Error! sorry account is not active')
                    return HttpResponseRedirect(reverse('signin'))
            else:
                messages.error(self.request, 'Error!, sorry account is not found')
                return HttpResponseRedirect(reverse('signin'))
        else:
            messages.error(self.request, 'Sorry! an error occurred, try again')
            context = {
                'title': 'Sign In',
                'next_url': next_url,
                'messages': messages.get_messages(self.request),
                'user': self.request.user,
                'form':form,
            }

            return context

这是我的表单类:

class UserLoginForm(forms.Form):
    username = forms.CharField(max_length=User._meta.get_field('email').max_length)
    password = forms.CharField(min_length=6, max_length=16, widget=forms.PasswordInput())

    def is_valid(self):
        valid = super(UserLoginForm, self).is_valid()
        if not valid:
            return valid
        try:
            user = User.objects.get(
                Q(username=self.cleaned_data['username']) | Q(email=self.cleaned_data['username'])
            )
        except User.DoesNotExist:
            self._errors['no_user'] = 'User does not exist'
            return False
        if not check_password(self.cleaned_data['password'], user.password):
            self._errors['invalid_password'] = 'Password is invalid'
            return False
        return True

提交表单后,我最终出现以下错误:

unbound method is_valid() must be called with UserLoginForm instance as first argument (got nothing instead)

我的错误在哪里?帮忙

彼得·德格洛珀

您在这里有几个问题,但这是导致您立即出错的问题:

 form = self.form_class
 ...
 if form.is_valid():

self.form_class是对类的引用,而不是表单实例。您应该根据您的请求构建一个表单实例,并验证:

form = self.form_class(request.POST)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

必须使用 Tk 实例作为第一个参数调用未绑定的方法 mainloop()(什么都没有)

类型错误:必须使用 Link 实例作为第一个参数调用未绑定的方法 set_rank()(什么都没有)

必须以MyModel实例作为第一个参数来调用未绑定方法save()

必须以实例作为第一个参数调用未绑定方法

必须以实例作为第一个参数调用未绑定方法-python

未绑定的方法必须以实例作为第一个参数来调用

如何修复TypeError:必须使用Dropper实例作为第一个参数来调用未绑定方法

未绑定的方法f()必须以fibo_实例作为第一个参数调用(取而代之的是class classobj实例)

未绑定的方法equaldigits()必须以sut实例作为第一个参数来调用(取而代之的是int实例)

在Spyder上使用Altair时,为什么我的两个图形都没有显示?

错误:必须使用“类名”实例作为第一个参数来调用未绑定方法“方法名”(取而代之的是classobj实例)

类型错误:必须使用 Vars 实例作为第一个参数调用未绑定的方法 SendVars()(改为使用 bool 实例)

必须使用GetPostView实例作为第一个参数来调用未绑定的方法comment()(改为使用WSGIRequest实例)

Python 错误:必须使用 Point 实例作为第一个参数调用未绑定的方法 distance()(改为使用 classobj 实例)

TypeError:必须以LoginPage实例作为第一个参数来调用未绑定方法test_logn()(改为使用CompanyManagement实例)

TypeError:未绑定方法parse()必须以ElementTree实例作为第一个参数调用(改为使用str str实例)

TypeError:未绑定方法move_to_element()必须以ActionChains实例作为第一个参数来调用(取而代之的是获取列表实例)

TypeError-未绑定方法ToTransition()必须以FSM实例作为第一个参数来调用(取而代之的是str实例)

TypeError:未绑定方法strftime()必须以Form1的第38行的日期时间实例作为第一个参数(而不是got str实例)来调用

我有一个带参数的过程,参数必须是默认的,但我想制作一个 if parameter = name_procedure exec 过程,否则什么都没有

为什么每次运行一个命令时位置变量都没有改变

一个mysql请求,什么都没有发生?

为什么所有 3 个打印都没有显示?

部署到 Netlify 一次,然后什么都没有。有任何想法吗?

为什么两次使用grep时都没有显示输出?

在Render()类中使用Const从Render返回的ReactJS错误什么都没有

为什么这个SQL使用工会都没有返回任何数据

xdebug未安装在xamp中。phpinfo中什么都没有

为什么两个标签都没有更新?