0

这是我的代码

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/')

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

4

2 回答 2

3

不。正如错误消息所暗示的那样,任何具有默认值的参数都必须位于所有没有默认值的参数之后。

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

于 2013-03-06T07:31:59.617 回答
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)

于 2013-03-06T07:34:28.720 回答