【问题标题】:How Do I Pass An Initial Values to Custom Form Using Django-Userena如何使用 Django-Userena 将初始值传递给自定义表单
【发布时间】:2012-09-07 00:35:23
【问题描述】:

我一直在网上搜索(和 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 中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py” 111. 响应 = 回调(请求,*callback_args,**callback_kwargs) signup_view 中的文件“/Users/lawrenceleach/Dropbox/Sites/django/wonderville/membership/views.py” 42. response = userena_views.signup(request, signup_form=form, extra_context={'section':'Membership','pagetitle':'Sign Up'}) _wrapped_view 中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/userena/decorators.py” 28. return view_func(request, *args, **kwargs) 注册中的文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/userena/views.py” 115. 表格 = 注册表格()

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

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

提前谢谢你!

L.

【问题讨论】:

    标签: django django-forms django-views


    【解决方案1】:

    您应该将表单类传递给对象的signup 函数。更多信息请查看code

    安装于:

    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.signup 里面有form = signup_form()。当然,现在您会丢失表单初始值。

    【讨论】:

    • 我在我的自定义视图中这样做。我已经查看了 userena 代码。我一定不明白你在说什么。您能否详细说明一下您认为我的代码有什么问题?
    • 我最初是这样做的。但是我需要将这些初始值传递给表单。
    • 我知道,但这是userena 的问题 - 没有传递其他表单参数的选项(例如initial)。您可以尝试在函数内包装表单创建并将其作为signup_form 参数传递。它应该可以工作,但这是丑陋的 hack。
    • 感谢康拉德。我想我会尝试将值传递给模板(通过 extra_content)并以这种方式设置我的初始值。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2014-03-20
      • 2018-10-25
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 2010-10-12
      相关资源
      最近更新 更多