如何在python django表单中使用默认参数传递非默认参数

时间:2013-03-06 07:25:34

标签: python django django-forms django-views django-formwizard

这是我的代码

class FarticlesWizard(FormWizard):

    def done(self,request,form_list):

        if request.method=='POST':
            form1=F1articles(request.POST)  
            form2=F2articles(request.POST)
            form_dict={}
            for x in form_list:
                form_dict=dict(form_dict.items()+x.cleaned_data.items())
                insert_db=Marticles(heading = form_dict['heading'],
                                    content = form_dict['content'],
                                    created_by=request.session['user_name'],    
                                    country=form_dict['country'],
                                    work=form_dict['work'])
                insert_db.save()
            return HttpResponseRedirect('/display/')

但我现在需要传递def done(self,request,id=None, form_list):,其中id是非默认参数...我收到错误消息non-default argument follows default argument (views.py, line 130)有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

没有。正如错误消息所示,任何带有默认值的参数都必须在没有默认值的所有参数之后。

为什么你觉得你需要在中间添加新参数?为什么不做def done(self, request, form_list, id=None)?在中间添加一个新参数将破坏所有使用位置参数调用该函数的现有代码。

答案 1 :(得分:1)

默认参数必须全部用于非默认参数,或者位置参数传递被搞砸了。如果您有def done(self,request,id=None,form_list):并且在某处调用done(r,fl),则python不知道fl是进入id还是form_list。您将始终必须指定id才能指定form_list。这就是为什么默认参数都在最后,例如def done(self,request,form_list,id=None)