Q:

How to use different form in Django-Registration

Django-Registration has several form classes in the forms.py file. One is "class RegistrationFormTermsOfService(RegistrationForm) ..
What do I change in the rest of Django Registration code to enable this form in my registration flow instead of RegistrationForm? 

A:

Updating the accepted answer to conform with Django 1.5 and the latest version of django-registration:
in urls.py:
from registration.forms import RegistrationFormTermsOfService
from registration.backends.default.views import RegistrationView

urlpatterns = patterns('',
    url(r'^accounts/register/$', RegistrationView.as_view(form_class=RegistrationFormTermsOfService), name='registration_register'),
    # your other URLconf stuff follows ...
)

then update the registration_form.html template and add a tos field, e.g.:
<p>
<label for="id_tos">I accept the terms of service</label>
{% if form.tos.errors %}
    <p class="errors">{{ form.tos.errors.as_text }}</p>
{% endif %}
{{ form.tos }}
</p>

A:

Here is a practical example using a custom form and backend which sets username == email address, and only prompts the user for an email address at registration. In, for e.g. my_registration.py:
from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site

from registration import signals
from registration.forms import RegistrationForm
from registration.models import RegistrationProfile
from registration.backends.default import DefaultBackend

class EmailRegistrationForm(RegistrationForm):
    def __init__(self, *args, **kwargs):
        super(EmailRegistrationForm,self).__init__(*args, **kwargs)
        del self.fields['username']

    def clean(self):
        cleaned_data = super(EmailRegistrationForm,self).clean()
        if 'email' in self.cleaned_data:
            cleaned_data['username'] = self.cleaned_data['username'] = self.cleaned_data['email']
        return cleaned_data

class EmailBackend(DefaultBackend):
    def get_form_class(self, request):
        return EmailRegistrationForm

In my_registration_urls.py:
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

from registration.views import activate
from registration.views import register

urlpatterns = patterns('',
                   url(r'^activate/complete/$',
                       direct_to_template,
                       { 'template': 'registration/activation_complete.html' },
                       name='registration_activation_complete'),
                   # Activation keys get matched by \w+ instead of the more specific
                   # [a-fA-F0-9]{40} because a bad activation key should still get to the view;
                   # that way it can return a sensible "invalid key" message instead of a
                   # confusing 404.
                   url(r'^activate/(?P<activation_key>\w+)/$',
                       activate,
                       { 'backend': 'my_registration.EmailBackend' },
                       name='registration_activate'),
                   url(r'^register/$',
                       register,
                       { 'backend': 'my_registration.EmailBackend' },
                       name='registration_register'),
                   url(r'^register/complete/$',
                       direct_to_template,
                       { 'template': 'registration/registration_complete.html' },
                       name='registration_complete'),
                   url(r'^register/closed/$',
                       direct_to_template,
                       { 'template': 'registration/registration_closed.html' },
                       name='registration_disallowed'),
                   (r'', include('registration.auth_urls')),
                   )

Then in your core urls.py, ensure you include:
url(r'^accounts/', include('my_registration_urls')),

A:

You can simply go into your urls.py and override the form class by doing something like:
from registration.forms import RegistrationFormTermsOfService

(r'^accounts/register/$', 'registration.views.register', {'form_class' : RegistrationFormTermsOfService}),

