【问题标题】:Django Key Error: KeyError at 'template.html' request when initiating a formDjango 键错误:启动表单时出现“template.html”请求时出现 KeyError
【发布时间】:2018-10-11 11:51:15
【问题描述】:

我正在使用 Pinax-Stripe 库,我想为登录的用户创建一个自定义帐户。 I'm trying to rewrite the CreateCustomAccountView() as a function based view。原因是我不明白CreateBankAccountView从哪里来,也找不到in the GitHub code

所以为了简单起见,我有以下形式:

class Form(DynamicForm):
    # some form fields
    def __init__(self, *args, **kwargs):
         self.request = kwargs.pop("request")

views.py

def view(request):
    if request.method == 'POST':
        form = Form(request.POST)
    else:
        form = Form()
    return render(request, 'dashboard/template.html', {'form': form})

我的模板处理器中有request。我不确定为什么会发生这种情况以及如何实例化一个空表单?

【问题讨论】:

    标签: python django django-forms stripe-payments


    【解决方案1】:

    由于您的表单弹出 request 没有默认值,

         self.request = kwargs.pop("request")
    

    您必须将请求传递给表单。例如:

    if request.method == 'POST':
        form = Form(request.POST, request=request)
    else:
        form = Form(request=request)
    

    【讨论】:

    • 谢谢,您能解释一下为什么这适用于FormView,但不适用于基于函数的视图吗?
    • formview 以 kwargs:form_kwargs['request'] = self.request 的形式传递request。如果没有,你会得到相同的KeyError
    【解决方案2】:

    您在基于类的视图中看到的问题是合法的,我猜开发人员突然忽略了这部分代码。 如果您仍想使用基于类的视图,请尝试替换:

    form_kwargs = super(
            CreateBankAccountView, self
        ).get_form_kwargs(
            *args, **kwargs
        )
    

    与:

    form_kwargs = super(CreateCustomAccountView, self).get_form_kwargs()
    

    类是CreateCustomAccountViewget_form_kwargs() 不带参数。

    【讨论】:

    • 好地方。我已经打开了一个拉取请求 #561 来更新文档。
    猜你喜欢
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    • 2017-07-25
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多