Ошибки в форме с ModelForm
Я не силен в английском
Я хочу иметь страницу входа в систему, я использую 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']
view:
class Login(LoginView):
form_class = LoginForm
template_name = 'account/login.html'
def get_success_url(self):
return reverse_lazy('account:home')
и login.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>
Когда я использую свою форму (с функциональным видом), мой браузер не предлагает мои сохраненные логины.
В 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
, конечно, не войдет в систему пользователя и, следовательно, мало что сделает.
Note: Since PEP-3135 [pep], you don't need to call
super(…)
with parameters if the first parameter is the class in which you define the method, and the second is the first parameter (usuallyself
) of the function.