2016-03-08 87 views
4

我正在使用的應用程序需要爲2種不同類型的用戶單獨登錄。我們需要「客戶」和「業務」所有者能夠註冊。多註冊,使用django-allauth的註冊表格

對於「企業」所有者所有我需要做的是設置布爾user.is_businessTrue

我已經使用ACCOUNT_SIGNUP_FORM_CLASS用一個單獨的類,設置布爾爲true,並且用得好好的。 但是,然後客戶端登錄不起作用了。

有沒有辦法爲不同的用戶創建一個單獨的註冊視圖?

我曾嘗試以下

class BusinessUserRegistrationView(FormView): 
    form_class = BusinessSignupForm 
    template_name = 'allauth/account/signup.html' 
    view_name = 'organisersignup' 
    success_url = reverse_lazy(view_name) 
organisersignup = BusinessUserRegistrationView.as_view() 

而且形式

class BusinessSignupForm(BaseSignupForm): 
    password1 = SetPasswordField(label=_("Password")) 
    password2 = PasswordField(label=_("Password (again)")) 
    confirmation_key = forms.CharField(max_length=40, 
             required=False, 
             widget=forms.HiddenInput()) 

    def __init__(self, *args, **kwargs): 

     super(BusinessSignupForm, self).__init__(*args, **kwargs) 
     if not app_settings.SIGNUP_PASSWORD_VERIFICATION: 
      del self.fields["password2"] 

    def clean(self): 
     super(BusinessSignupForm, self).clean() 
     if app_settings.SIGNUP_PASSWORD_VERIFICATION \ 
       and "password1" in self.cleaned_data \ 
       and "password2" in self.cleaned_data: 
      if self.cleaned_data["password1"] \ 
        != self.cleaned_data["password2"]: 
       raise forms.ValidationError(_("You must type the same password" 
               " each time.")) 
     return self.cleaned_data 

    def save(self, request): 
     adapter = get_adapter() 
     user = adapter.new_user(request) 
     user.is_business = True 
     adapter.save_user(request, user, self) 
     self.custom_signup(request, user) 
     setup_user_email(request, user, []) 
     return user 

而在urls.py

url(r'^organiser/$', 'authentication.views.organisersignup', name='organisersignup'), 

的問題是,不知何故,布爾is_business是永遠設置爲True。 從節目中,我可以保存,但保存的東西從來不是一個始終是客戶的業務。 BusinessSignupForm是在allauth表單中找到的SignUpForm的副本。

我在做什麼錯?

回答

5

我會回答這個問題,因爲我發現解決方案使用allauth具有多個註冊表單。

形式:

class BusinessSignupForm(SignupForm): 
    def save(self, request): 
     user = super(BusinessSignupForm, self).save(request) 
     user.is_organizer = True 
     user.save() 
     return user 

查看

class BusinessUserRegistrationView(SignupView): 
    template_name = 'allauth/account/signup-organizer.html' 
    form_class = BusinessSignupForm 
    redirect_field_name = 'next' 
    view_name = 'organisersignup' 
    success_url = None 

    def get_context_data(self, **kwargs): 
     ret = super(BusinessUserRegistrationView, self).get_context_data(**kwargs) 
     ret.update(self.kwargs) 
     return ret 

organisersignup = BusinessUserRegistrationView.as_view() 

模板

<form id="signup_form" method="post" action="{% url 'organisersignup' %}"> 
     {% csrf_token %} 
     {% bootstrap_form form %} 
</form> 

這種可重複使用一遍又一遍,如果你有一個修改自定義用戶模型的屬性。

目前運行的Django == 1.8.10和Django的allauth == 0.24.1

1

而不是使用user.is_business = True來區分類型的用戶考慮使用BusinessProfile類。如有必要,您可以爲每個用戶配置多種配置文件類型,例如PartnerProfile,ClientProfile,SupplierProfile等。每種配置文件類型都可以擁有自己的註冊,登錄和配置文件頁面。

以下是一些替代解決方案: Multiple user type sign up with django-allauth