0

我一直在网上搜索(和 StackOverflow),寻找看似非常简单的问题的答案。我正在使用带有自定义表单的 django-userena。

在我的 form.py 里面是:

class RegistrationForm(SignupFormOnlyEmail):

    first_name = forms.CharField(label='First Name', max_length=30, required=True, error_messages={'required':'Please Provide Your First Name'})
    last_name = forms.CharField(label='Last Name', max_length=30, required=True)
    email2 = forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict, maxlength=75)), label=_("Retype Email"), required=True)
    parent_type = forms.ChoiceField(label="I am a", choices=ACCOUNT_TYPES, widget=forms.RadioSelect)
    child_count = forms.ChoiceField(label="My Kids", choices=KID_CHOICES, widget=forms.Select)
    grade = forms.ChoiceField(label="My Classroom", choices=GRADE_CHOICES, widget=forms.Select)
    tos = forms.BooleanField(label="I accept the Terms of Use.", required=True)

    def __init__(self, *args, **kwargs):

        self.initial = kwargs.pop('initial', None)
        kidCount = self.initial['child_count']
        account_type = self.initial['parent_type']

        super(RegistrationForm, self).__init__(*args, **kwargs)

在我的 urls.py 里面我放了:

url(r'^membership/signup/$', signup_view, name='userena_signup'),

我的自定义视图如下所示:

def signup_view(request):

    form = RegistrationForm(initial={'parent_type':request.session['parent_type'],'child_count':request.session['child_count']})
    response = userena_views.signup(request,  signup_form=form, extra_context={'section':'Membership','pagetitle':'Sign Up'})
    return response

当我发布表单并转到 /membership/signup/ 时,我得到一个“TypeError”

“RegistrationForm”对象不可调用

这是堆栈跟踪的转储:

回溯:get_response 111 中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py”。 response = callback(request, *callback_args, **callback_kwargs)signup_view 42 中的文件“/Users/lawrenceleach/Dropbox/Sites/django/wonderville/membership/views.py”。 response = userena_views.signup(request, signup_form=form, extra_context={'section':'Membership ','pagetitle':'Sign Up'}) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/userena/decorators.py" in _wrapped_view 28. return view_func( request, *args, **kwargs) 注册 115 中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/userena/views.py”。表格 = 注册表格()

异常类型:/membership/signup/ 处的 TypeError 异常值:“RegistrationForm”对象不可调用

就像我说的,我确信答案正盯着我看,而我只是看不到它。任何帮助将不胜感激。

先感谢您!

L.

4

2 回答 2

1

您应该将表单类传递给signup对象的函数。查看代码以获取更多信息。

安装:

form = RegistrationForm(initial={'parent_type':request.session['parent_type'],'child_count':request.session['child_count']})
response = userena_views.signup(request,  signup_form=form, extra_context={'section':'Membership','pagetitle':'Sign Up'})

它应该是:

response = userena_views.signup(request,  signup_form=RegistrationForm, extra_context={'section':'Membership','pagetitle':'Sign Up'})

因为里面userena_views.signupform = signup_form()。当然,现在您丢失了表单初始值。

于 2012-09-13T20:47:42.630 回答
1

解决方案是将初始表单值作为字典对象传递给视图中表单调用的“extra_context”变量。如果一直使用 Django 的内置表单工具,那么我最初在上面所做的就可以了。我把这个问题发布给了 Userena 的人。这似乎是他们系统中的一个错误。

于 2012-09-14T20:07:40.740 回答