使用FormWizard和django-registration手动注册用户

时间:2016-05-11 05:26:37

标签: django django-registration formwizard

我有一个UserModel和一个UserProfile模型,我想使用formtools中的FormWizard来注册用户并使用用户的必要输入设置userprofile。

我正在努力解决一些问题并尝试修补此问题,迄今为止没有成功。

我收到错误消息:

AttributeError at /accounts/register/
'MyRegistrationView' object has no attribute 'request'

forms.py

class UserForm(forms.ModelForm):
    password1 = forms.CharField(widget=forms.PasswordInput())
    password2 = forms.CharField(widget=forms.PasswordInput())


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

class UserProfileForm(forms.ModelForm):
    course_accid = CourseModelChoiceField(Course.objects.all(), empty_label=None)

    class Meta:
        model = UserProfile
        fields = ('picture','reg_completed')

url.py

urlpatterns = solid_i18n_patterns ('',
    url(r'^accounts/register/$', RegistrationWizard.as_view([UserForm, UserProfileForm]), name='registration_register'),
    url(r'^accounts/', include('registration.backends.simple.urls')),

views.py

from formtools.wizard.views import SessionWizardView
from registration.signals import *
from django.core.files.storage import FileSystemStorage
from django.conf import settings

class MyRegistrationView(RegistrationView):
     def get_success_url(self, user):
         return '/index/'


TEMPLATES = {"0": "registration/registration_form_wiz.html",
             "1": "registration/registration_form_wiz.html",
            }

class RegistrationWizard(SessionWizardView):
    form_list = [UserForm, UserProfileForm]
    file_storage = FileSystemStorage(location=settings.MEDIA_ROOT + '/photos')

    def get_template_names(self):
        return [TEMPLATES[self.steps.current]]

    def done(self, form_list, **kwargs):

        userreg = MyRegistrationView()
        for form in form_list:
            if isinstance(form, UserForm):
                userreg.register(form)
            elif isinstance(form, UserProfileForm):
                userprofile = form.save(commit=False)
                user = self.request.user
                userprofile.user = user
                userprofile.save()

        return HttpResponseRedirect('/index/')

任何有关错误或其他方法会更好的帮助都是非常受欢迎的。

谢谢!

0 个答案:

没有答案