2016-09-28 3 views
1

Так что я использую django-registration для активации электронной почты и тому подобное. Я определил свою форму и прихожу к ней правильно, но по какой-то причине она использует базовую форму из django-registration вместо моей. Я не имею ни малейшего понятия, почему это происходит, какие-то мысли?используя регистрационную форму django вместо собственного

views.py

from django.shortcuts import render, render_to_response 
from django.http import HttpResponseRedirect 
from django.template.context_processors import csrf 
from django.contrib.auth.models import User 
from .forms import UserForm 


def register(request): 
    if request.method == 'POST': 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register/complete') 

    else: 
     form = UserForm() 
     token = {} 
     token.update(csrf(request)) 
     token['form'] = form 

    return render('registration/registration_form.html', token) 

def registration_complete(request): 
    return render('registration/registration_complete.html') 

urls.py

from django.conf.urls import include, url 
from django.contrib import admin 
from main import views 

urlpatterns = [ 

    # Registration URLs 
    url(r'^accounts/', include('registration.backends.hmac.urls')), 
    url(r'^accounts/register/$', views.register, name='register'), 
    url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'), 

    url(r'^admin/', admin.site.urls), 
    url(r'^$', views.index, name='index'), 
    url(r'^contact/$', views.contact, name='contact'), 
    url(r'^login/$', views.login, name='login'), 
    url(r'^register/$', views.register, name='register'), 
    url(r'^profile/$', views.profile, name='profile'), 
    url(r'^blog/$', views.blog, name='blog'), 

forms.py

from django import forms 
from django.contrib.auth.models import User 
from django.contrib.auth.forms import UserCreationForm 
from django.utils.translation import gettext as _ 
from registration.forms import RegistrationFormUniqueEmail, RegistrationForm 

class UserForm(UserCreationForm): 

    email = forms.EmailField(required=True) 
    first_name = forms.CharField(label=_("Firstname"), required=False) 
    last_name = forms.CharField(label=_("Lastname"), required=False) 

    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2') 

    def save(self, commit=True): 
     user = super(UserForm, self).save(commit=False) 
     user.first_name = self.cleaned_data['first_name'] 
     user.last_name = self.cleaned_data['last_name'] 
     user.email = self.cleaned_data['email'] 

     if commit: 
      user.save() 

     return user 

шаблон

{% extends "base.html" %} 
{% block title %}Register{% endblock %} 
{% block content %} 

    <h2>Registration</h2> 

    <form action="/accounts/register/" method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Register" /> 

    </form> 

{% endblock %} 
+0

Вам нужно создать подкласс 'UserForm (RegistrationForm):' не 'UserForm (UserCreationForm):' –

+0

Я думал, что это было а также, но ничего не изменило. – Kerosive

+0

Что вы ожидаете? Какие поля? –

ответ

1

Поскольку urlpatterns имеет этот порядок:

url(r'^accounts/', include('registration.backends.hmac.urls')), 
url(r'^accounts/register/$', views.register, name='register'), 
url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'), 

Url от url(r'^accounts/', include('registration.backends.hmac.urls')), сопрягать ваш /accounts/register/ URL первой, и не добраться до views.register зрения. Таким образом, чтобы изменить то, что вам нужно изменить порядок, так что шаблоны URL будет

urlpatterns = [ 
    url(r'^accounts/register/$', views.register, name='register'), 
    url(r'^accounts/register/complete/$', views.registration_complete, name='registration_complete'), 
    url(r'^accounts/', include('registration.backends.hmac.urls')), 
    ... 
    ] 
Смежные вопросы