在我的項目中,我有一個開放註冊表單,您可以在其中創建公司及其所有信息。在手動創建的用戶上強制重置密碼
之後,您可以邀請人來幫助您管理公司的信息。要做到這一點,我的想法是,當記錄的用戶添加另一個管理員時,我會使用虛假密碼手動創建用戶,並向創建的電子郵件發送重置密碼請求,以便他可以創建自己的密碼。最重要的代碼如下:
from django.contrib.auth.forms import PasswordResetForm
...
def create_admin(request):
if request.method == 'POST':
form = AdminForm(request.POST)
if form.is_valid():
email = form.cleaned_data.get("email")
random_pass = User.objects.make_random_password()
user = User(username=email, email=email, password=random_pass)
user.save()
company.add_admin(user)
reset_form = PasswordResetForm({'email': email})
reset_form.save(
email_template_name="rh/password_reset_email.html",
subject_template_name="rh/password_reset_subject.txt")
return redirect('dashboard')
else:
form = AdminForm()
return render(request, 'rh/create_admin.html', {'form': form})
不幸的是,上面的代碼返回一個Exception Type: AttributeError 'PasswordResetForm' object has no attribute 'cleaned_data'
要注意:
- 我已經擁有了一個全重置密碼功能,利用Django和定製的一切模板。這就是爲什麼我試圖使這項工作這樣
- 我想自定義email_template_name和subject_template_name,就像在我的代碼
在此先感謝
多一點上下文會有幫助。你在哪裏調用'is_valid()'?之後,表單只有'cleaned_data'。 –
我相信問題不在於這個函數中看到,而是在PasswordResetForm中。儘管如此,我用全部功能更新了這個問題。 –
然後你可以添加你的PasswordResetForm嗎?你在形式上壓倒乾淨嗎?如果需要,您需要返回'cleaned_data'。但看看[源代碼](https://github.com/django/django/blob/master/django/forms/forms.py),似乎clean_data應該在那裏,因爲它在full_clean方法中創建爲空字典。 –