2016-02-29 63 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。在保存表單數據之前在視圖中使用它。

相關問題