2016-02-29 98 views
1

我使用自定义UserCreationForm创建新用户,然后使用auth.views中的password_reset和自定义电子邮件模板向用户发送注册邮件。此过程工作正常,用户能够成功完成注册过程并开始使用该应用程序。我现在想创建用户而不必为用户设置密码。我试图在UserCreationForm初始化方法中设置self.fields ['password1']。required和self.fields ['password2']。Falke 建议使用here,但这并不适用于我。不幸的是,这很难调试。我没有看到任何错误消息,但我知道RegistrationView注册方法没有被调用。Django无密码创建新用户

这里是我的UserCreationForm

class UserCreateForm(UserCreationForm): 
    email = forms.EmailField(required=True) 

    class Meta: 
     model = User 
     fields = ("email",) 

    def __int__(self): 
     self.fields['password1'].required = False 
     self.fields['password2'].required = False 

    def save(self, commit=True): 
     user = super(UserCreateForm, self).save(commit=False) 
     clean_email = self.cleaned_data["email"] 
     user.email = clean_email 
     if commit: 
      user.save() 
     custom_user = CustomUser() 
     custom_user.id = user 
     custom_user.save() 
     return user 

这里是我的RegistrationView

class UserRegistration(RegistrationView): 
    def __init__(self): 
     self.form_class = UserCreateForm 
     self.success_url = 'login' 
     self.template_name = 'register.html' 

    def register(self, request, form): 
     new_user = form.save() 

我使用Django 1.8。请让我知道,如果有任何其他信息将有助于分享。

+0

这个'RegistrationView'类来自哪里?如果它是'FormView',那么重载'form_invalid',添加'import pdb; pdb.set_trace()',并调试'form.errors'。我猜这是一个验证的事情。 – grantmcconnaughey

+0

此外,您的表单类重写'__int__',而不是'__init__'。这可能是你的问题。 – grantmcconnaughey

回答

2

正如你所描述的,你修改了表单域不需要密码,但模型呢?内置的User模型强制使用密码(它是必需的模型字段),并且如果您尝试保存User没有对象的对象,将会出错。当您不想设置真实密码时有一种特殊方法 - set_unusable_password。在保存表单数据之前在视图中使用它。

相关问题