console.log(this);
выводит тоже самое, что описывал выше в комментарии. console.log(form[0]);
в консолях выводит:Window → http://127.0.0.1:8000/user/
Window {frames: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
console.log(form[0]);
в консолях выводит:Window → http://127.0.0.1:8000/user/
Window {frames: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
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
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,
)
django/views/generic/edit.py
? 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__
, но проблему это не решило. При отправки формы срабатывает та же ошибка, что описывал выше в комментарии. SetPasswordForm
. Можете пожалуйста взглянуть на комментарий выше. Я там расписал о своей текущей проблеме. Что думаете по этому поводу? 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)
context = {'user': profile.user,}
, затем уже в шаблоне указал id пользователя. Тоже сработало. Cпасибо вам большое! Могли бы вы еще раз скомпоновать все ваши комментарии в один ответ, чтобы я его отметил как ответ. profile = Profile.objects.get(pk=self.kwargs['pk'])
print profile.user.id
model = Profile
. Затем дописал метод form_valid следующим образом. Получилось громоздко, как вы думаете лучше перенести сохранения в метод save в файл forms.py?def form_valid(self, form):
profile = form.save(commit=False)
profile.user.username = form.cleaned_data['username']
profile.user.first_name = form.cleaned_data['first_name']
profile.user.last_name = form.cleaned_data['last_name']
profile.user.email = form.cleaned_data['email']
profile.user.password = form.cleaned_data['password']
profile.user.groups = form.cleaned_data['groups']
profile.user.user_permissions = form.cleaned_data['user_permissions']
profile.user.is_staff = form.cleaned_data['is_staff']
profile.user.is_active = form.cleaned_data['is_active']
profile.user.is_superuser = form.cleaned_data['is_superuser']
profile.user.last_login = form.cleaned_data['last_login']
profile.user.date_joined = form.cleaned_data['date_joined']
profile.user.save()
profile.save()
data = dict()
data['form_is_valid'] = True
context = {'users': Profile.objects.all()}
data['html_users'] = render_to_string('users/users.html', context)
return JsonResponse(data)
LevelName: INFO | Module: basehttp | Process: 806 | Thread: 123145429389312 | Message: "GET /user/31/edit/ HTTP/1.1" 200 9329
url(r'^(?P<pk>\d+)/edit/$', UserEditView.as_view(), name='user_edit'),
profile = Profile.objects.get(pk=self.kwargs['pk'])
user_edit_form = UserForm(instance=profile.user)
if (data.form_is_valid)
хочу обновлять список пользовалей (#users), показывать сообщение в блоке (#user-action-message) и затем уже закрыть модальное окно. Все это делается по urlhttp://127.0.0.1:8000/user/
. При нажатии кнопки отправки формы меня перебрасывает на urlhttp://127.0.0.1:8000/user/create/
и показывается JSON. JSON к слову верный. Надеюсь я смог объяснить странную ситуацию. Есть ли у вас идеи как исправить эту проблему?