2013-09-30 1 views
5

У меня есть одна пользовательская модель, которая содержит несколько полей в дополнение к электронной почте и паролю. Одно поле - user_type, которое настроено либо дизайнером, либо разработчиком. Другие поля относятся к одному или другому типу.Как создать несколько страниц регистрации с помощью django-allauth?

Мне нужно иметь отдельную регистрационную форму для каждого типа пользователя.

Настройка одной формы регистрации с пользовательскими полями была простой: django-allauth, поскольку я мог бы использовать настройку ACCOUNT_SIGNUP_FORM_CLASS. Я не уверен, как настроить более одного.

+0

ли вам когда-нибудь решить это? Я за чем-то очень похож ... – awidgery

+0

Мне это очень нужно прямо сейчас ... любые идеи? – staggart

+0

Старый вопрос, я знаю, но было бы полезно получить ответ. Посмотрите это сообщение https://stackoverflow.com/a/44517924/3549503 Это пошаговое руководство, чтобы иметь несколько типов и форм пользователя с django-allauth – mrnfrancesco

ответ

-1

Выглядит для меня, если у вас есть это на отдельных моделях.

Design индивидуальный вид и веб-сайты для этих Signup, ваше мнение может выглядеть как этот

def register_account(request): 
    template = 'shopper/register.html' 
    if request.POST: 
     form = UserprofileForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      username = form.cleaned_data['username'] 
      email = form.cleaned_data['email'] 
      first_name = form.cleaned_data['first_name'] 
      last_name = form.cleaned_data['last_name'] 
      password1 = form.cleaned_data['password1'] 
      u = User(username=username, email=email, last_name=last_name, first_name=first_name) 
      u.set_password(password1) 
      u.save() 
    else: 
     form = UserprofileForm() 
    return render_to_response(template, 
          {'form': form}, context_instance=RequestContext(request)) 

и вашей формы

class UserprofileForm(ModelForm): 

required_css_class = 'required' 

username = forms.RegexField(regex=r'^[\[email protected]+-]+$', 
          max_length=30, 
          label=_("Username"), 
          error_messages={'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")}) 
def clean_username(self): 
    """ 
    Validate that the username is alphanumeric and is not already 
    in use. 

    """ 
    existing = User.objects.filter(username__iexact=self.cleaned_data['username']) 
    if existing.exists(): 
     raise forms.ValidationError(_("A user with that username already exists.")) 
    else: 
     return self.cleaned_data['username'] 


password1 = forms.CharField('Password', widget=forms.PasswordInput(), help_text='Password') 
password2 = forms.CharField('Repeat Password', widget=forms.PasswordInput(), help_text='Repeat Password') 

def clean_password2(self): 
    password1 = self.cleaned_data.get('password1') 
    password2 = self.cleaned_data.get('password2') 
    if not password1: 
     raise forms.ValidationError("You must confirm your password") 
    if password1 != password2: 
     raise forms.ValidationError("Your passwords do not match") 
    return password2 
#town = forms.ModelChoiceField(queryset=Town.objects.all(), widget=forms.Select(attrs={'style': 'width: 100%;', 'data-placeholder': 'Select Town', 'tabindex': '2'})) 
class Meta: 
    model = Userprofile 
    exclude =() 

Оттуда я уверен, вы будете иметь возможность тренировки RET.

Успехов

0

Это было долгое время после того, как последний ответ дан, но надеюсь, что это поможет кому-то. Пользователь расширен с помощью столбца «account_type».

forms.py

from django import forms 

from allauth.account.forms import SignupForm 


class AgentSignUpForm(SignupForm): 

    first_name = forms.CharField(max_length=30, label='First name', required=False) 
    last_name = forms.CharField(max_length=30, label='Last name', required=False) 

    def save(self, request): 
     user = super(AgentSignUpForm, self).save(request) 
     user.account_type = 1 
     user.save() 
     return user 

class CandidateSignUpForm(SignupForm): 

    first_name = forms.CharField(max_length=30, label='First name', required=False)  
    last_name = forms.CharField(max_length=30, label='Last name', required=False) 

    def save(self, request): 
     user = super(CandidateSignUpForm, self).save(request) 
     user.account_type = 2 
     user.save() 
     return user 

views.py

from django.shortcuts import render 

from allauth.account.views import SignupView 

from .forms import AgentSignUpForm 
from .forms import CandidateSignUpForm 


class AgentSignUp(SignupView): 

    template_name = 'allauth/signup_agent.html' 
    form_class = AgentSignUpForm 
    redirect_field_name = 'next' 
    view_name = 'agent_sign_up' 

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

class CandidateSignUp(SignupView): 

    template_name = 'allauth/signup_candidate.html' 
    form_class = CandidateSignUpForm 
    redirect_field_name = 'next' 
    view_name = 'candidate_sign_up' 

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

urls.py

from django.conf.urls import url, include 

from . import views 

urlpatterns = [ 
    url(r'^agent-sign-up/', views.AgentSignUp.as_view(), name='agent-sign-up'), 
    url(r'^candidate-sign-up/', views.CandidateSignUp.as_view(), name='candidate-sign-up'), 
] 

2 шаблоны

#templates/allauth/signup_agent.html 
<form method="post" action="{% url 'agent-sign-up' %}"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="ok" /> 
</form> 

#templates/allauth/signup_candidate.html 
<form method="post" action="{% url 'candidate-sign-up' %}"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="ok" /> 
</form>