ModelForm 中的表单错误

问题描述 投票:0回答:1

我英语不好

我想要一个登录页面,我使用 ModelForm 和 LoginView。

当我想查看该页面时,我收到此错误:

BaseModelForm.__init__() got an unexpected keyword argument 'request'

当我不使用表格时,总是返回到同一页面。我检查了request.method,是GET!

这是我的表格:

class LoginForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(LoginForm, self).__init__(*args, **kwargs)

    class Meta:
        model = User
        fields = ['username', 'password']

查看:

class Login(LoginView):
    form_class = LoginForm
    template_name = 'account/login.html'

    def get_success_url(self):
        return reverse_lazy('account:home')

和登录.html

            <form action="{% url 'account:home' %}" method="post">
                {% csrf_token %}
                <div class="input-group mb-3">
                    <input id="username" type="text" class="form-control" placeholder="Username">
                    <div class="input-group-append">
                        <div class="input-group-text">
                            <span class="fas fa-user"></span>
                        </div>
                    </div>
                </div>
                <div class="input-group mb-3">
                    <input id="password" type="password" class="form-control" placeholder="Password">
                    <div class="input-group-append">
                        <div class="input-group-text">
                            <span class="fas fa-lock"></span>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <!-- /.col -->
                    <div class="col-12">
                        <button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
                    </div>
                    <!-- /.col -->
                </div>
            </form>

当我使用我的表单(带有功能视图)时,我的浏览器不建议我保存的登录信息。

django django-forms
1个回答
0
投票

LoginView
有点棘手:它将请求传递给表单,让
ModelForm
登录用户,需要从超级调用中的
kwargs
中删除,例如:

class LoginForm(ModelForm):
    def __init__(self, *args, request=None, **kwargs):
        super().__init__(*args, **kwargs)

    class Meta:
        model = User
        fields = ['username', 'password']

目前,您的

LoginForm
当然不会登录用户,因此不会做太多事情。


注意:自 PEP-3135 [pep] 起,如果第一个参数是定义方法的类,第二个参数是方法,则无需带参数调用

super(…)
函数的第一个参数(通常为
self
)。

© www.soinside.com 2019 - 2024. All rights reserved.