联合django注册和FormWizard的问题

问题描述:

我做错了什么,但我不知道是什么。我尝试Django的注册0.7和表单向导结合起来,但我得到的错误是这样的:联合django注册和FormWizard的问题

AttributeError at/
    'BoundField' object has no attribute 'strip 
/home/celtrun/rails/neuroweb/site-packages/django/core/handlers/base.py in get_response 
         response = callback(request, *callback_args, **callback_kwargs) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/site-packages/django/utils/decorators.py in _wrapper 
      return bound_func(*args, **kwargs) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/site-packages/django/utils/decorators.py in _wrapped_view 
        response = view_func(request, *args, **kwargs) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/site-packages/django/utils/decorators.py in bound_func 
       return func(self, *args2, **kwargs2) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/site-packages/django/contrib/formtools/wizard.py in __call__ 
       return self.done(request, previous_form_list + [form]) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/apps/registration/views.py in done 
       extra_context=None, formed=form_list[0]) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/apps/registration/views.py in register 
          send_email=True, profile_callback=None) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/apps/registration/models.py in create_inactive_user 
     new_user = User.objects.create_user(username, email, password) ... 
▶ Local vars 
/home/celtrun/rails/neuroweb/site-packages/django/contrib/auth/models.py in create_user 
      email_name, domain_part = email.strip().split('@', 1) ' 

正如我FormWizard我有(r'^$', RegistrationWizard([RegistrationForm, CaptchaForm])),

class RegistrationWizard(FormWizard,): 
    def done(self, request, form_list): 
     formed = form_list[0] 
     register(request, success_url=None, 
      form_class=RegistrationForm, profile_callback=None, 
      template_name='base.html', 
       extra_context=None, formed=form_list[0]) 
     return redirect('/accounts/register/complete/') 
    def get_template(self, steps): 
     return ['base.html', 'base.html'] 

class CaptchaForm(forms.Form): 
    recaptcha = ReCaptchaField()  

注册功能:

def register(request, success_url=None, 
      form_class=RegistrationForm, profile_callback=None, 
      template_name='registration/registration_form.html', 
      extra_context=None, formed=None): 
    if request.method == 'POST': 
     if formed: form = formed 
     if form.is_valid(): 
      username = formed['username'] 
      email = formed['email'] 
      password = formed['password1'] 
      RegistrationProfile.objects.create_inactive_user(username, password, email, 
          send_email=True, profile_callback=None)   
      return HttpResponseRedirect(success_url or reverse('registration_complete')) 
    else: 
     form = form_class() 

    if extra_context is None: 
     extra_context = {} 
    context = RequestContext(request) 
    for key, value in extra_context.items(): 
     context[key] = callable(value) and value() or value 
    return render_to_response(template_name, 
           { 'form': form }, 
           context_instance=context) 

而且注册配置文件的create_inactive_user函数:

def create_inactive_user(self, username, password, email, 
          send_email=True, profile_callback=None): 
     new_user = User.objects.create_user(username, email, password) 
     new_user.is_active = False 
     new_user.save() 

     registration_profile = self.create_profile(new_user) 

     if profile_callback is not None: 
      profile_callback(user=new_user) 

     if send_email: 
      from django.core.mail import send_mail 
      current_site = Site.objects.get_current() 

      subject = render_to_string('registration/activation_email_subject.txt', 
             { 'site': current_site }) 
      # Email subject *must not* contain newlines 
      subject = ''.join(subject.splitlines()) 

      message = render_to_string('registration/activation_email.txt', 
             { 'activation_key': registration_profile.activation_key, 
             'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, 
             'site': current_site }) 

      send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [new_user.email]) 
     return new_user 

我希望我没有错过重要的东西展示。有人知道这样的错误可能意味着什么或者有其他帮助吗?

在你register功能,您有:

email = formed['email'] 

email将指向电子邮件表单字段没有它的价值。要获取您的字段的值,always use the cleaned_data dictionary of the form

你的代码应该(在register)(为usernamepassword同样的事情):

... 
if request.method == 'POST': 
    if formed: form = formed 
    if form.is_valid(): 
     username = form.cleaned_data['username'] 
     email = form.cleaned_data['email'] 
     password = form.cleaned_data['password1'] 
     RegistrationProfile.objects.create_inactive_user(username, password, email, 
         send_email=True, profile_callback=None) 
... 
+0

干得好。谢谢。我仍然有一些错误,因为电子邮件不是,但我描述的错误被贬低。 – krzyhub

我的膝盖本能是你忘记了在你的设置文件中添加一个中间件行。但是我实际上并不知道 - 只是本能。