我想写一个表格,显示用户的电子邮件,但允许他们通过输入当前密码和新密码两次来更改密码。我也想使用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还是我必须自己滚动表格并自己完成所有逻辑?
答案 0 :(得分:1)
这里:
return render(
request,
'freelancestudent/edit_account_details.html', {
{'form': account_form}
})
你有两套{}
。内部定义dict
,外部定义set
,因此它等同于:
context = {'form': account_form}
whatever = set(context)
现在sets
需要它们的值可以清除(就像dict
个键一样),并且dict
不可清除,因此您的错误信息。
但无论如何:render
期望dict
,而不是set
,所以你想要的是:
return render(
request,
'freelancestudent/edit_account_details.html',
{'form': account_form}
)