Я хочу написать форму, которая будет отображать электронную почту пользователя, но позволит им сменить пароль, дважды введя свой текущий пароль и новый пароль. Я тоже хочу использовать ModelForm
.Форма, которая меняет адрес электронной почты и пароль
У меня есть User
:
# models.py
class User(AbstractBaseUser):
email = models.EmailField(unique=True)
И я начал в форме:
# forms.py
class ChangeAccountDetailsForm(forms.ModelForm):
class Meta:
model = User
fields = ('email',)
current_password = forms.CharField(widget=forms.PasswordInput)
password = forms.CharField(widget=forms.PasswordInput)
confirm_password = forms.CharField(widget=forms.PasswordInput)
Я создал простой вид, что работает только с запросом GET в минуту:
# views.py
def edit_account_details(request):
if request.method == 'GET':
account_form = ChangeAccountDetailsForm()
return render(request, 'freelancestudent/edit_account_details.html', {
{'form': account_form}
})
else:
pass
И простой HTML-файл, который просто вызывает {{form.as_p}}
. Когда я запускаю его, как есть, я получаю ошибку unhashable type: 'dict'
по адресу {'form': account_form}
. Как я могу отобразить электронную почту текущего пользователя и предоставить функции для изменения пароля. Возможно ли это с ModelForm, или мне придется сворачивать свою собственную форму и самостоятельно выполнять всю логику?
Обратите внимание, что ваша проблема не совсем связана с того, что делает форму; но также обратите внимание, что в основе auth framework Django входят [views] (https://docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.views) и [forms] (https: //docs.djangoproject.com/en/1.8/topics/auth/default/#module-django.contrib.auth.forms), которые выполняют именно это. –