class UserEditForm(UserChangeForm):
class Meta:
model = User
exclude = ('groups', 'user_permissions', 'is_staff')
SetPasswordForm
. Проблема у меня следующая: Есть модальное окно с формой. Сама форма открывается (срабатывает метод get) корректно, но при отправки формы (submit) срабатывает ошибка (см. ниже). Какой аргумент не хватает при POST запросе можете подсказать?from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import SetPasswordForm
class UserPasswordChangeForm(SetPasswordForm):
class Meta:
model = User
fields = ('new_password1', 'new_password2',)
def __init__(self, *args, **kwargs):
super(UserPasswordChangeForm, self).__init__(*args, **kwargs)
self.fields['new_password1'].widget.attrs = {'class': 'form-control','id': 'new_password1',}
self.fields['new_password2'].widget.attrs = {'class': 'form-control', 'id': 'new_password2',}
class UserPasswordChangeView(UpdateView):
template_name = "users/password_change.html"
form_class = UserPasswordChangeForm
model = User
def get(self, request, *args, **kwargs):
profile = Profile.objects.get(pk=self.kwargs['pk'])
context = {
'user': profile.user,
'user_password_change_form': UserPasswordChangeForm(user=profile.user),
}
data = dict()
data['html_user_password_change_form'] = render_to_string(
'users/password_change.html', context, request=request
)
return JsonResponse(data)
def form_valid(self, form):
form.save()
data = dict()
data['form_is_valid'] = True
context = {'profiles': Profile.objects.all()}
data['html_users'] = render_to_string('users/users.html', context)
return JsonResponse(data)
Time: [06/Nov/2017 04:40:26] | LevelName: ERROR | Module: exception | Process: 1146 | Thread: 123145551802368 | Message: Internal Server Error: /user/50/password_change/
Traceback (most recent call last):
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/edit.py", line 240, in post
return super(BaseUpdateView, self).post(request, *args, **kwargs)
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/edit.py", line 181, in post
form = self.get_form()
File "/Users/nurzhan_nogerbek/Virtualenvs/py2714/lib/python2.7/site-packages/django/views/generic/edit.py", line 45, in get_form
return form_class(**self.get_form_kwargs())
File "/Applications/Projects/web/dashboard.kase.kz/users/forms.py", line 117, in __init__
super(UserPasswordChangeForm, self).__init__(*args, **kwargs)
TypeError: __init__() takes at least 2 arguments (1 given)
SetPasswordForm
. Можете пожалуйста взглянуть на комментарий выше. Я там расписал о своей текущей проблеме. Что думаете по этому поводу? class UserPasswordChangeForm(SetPasswordForm):
class Meta:
model = User
fields = ('new_password1', 'new_password2',)
def __init__(self, user, *args, **kwargs):
self.user = user
super(UserPasswordChangeForm, self).__init__(user, *args, **kwargs)
__init__
, но проблему это не решило. При отправки формы срабатывает та же ошибка, что описывал выше в комментарии. django/views/generic/edit.py
? django/contrib/auth/password_validation.py
.class UserPasswordChangeForm(forms.Form):
new_password = forms.CharField(
widget=forms.PasswordInput(
attrs={
"class": "form-control",
"id": "new_password",
}
),
label=_("New password"),
required=True,
)
from django.contrib.auth.password_validation import validate_password
def clean_new_password(self):
password = self.cleaned_data.get('new_password')
validate_password(password)
return password
if cleaned_data['username'] == cleaned_data['password']:
# Вывести ошибку
else:
# Вызвать create_user() передав данные