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がデフォルトではない引数であるdefを渡す必要があります...エラーメッセージ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 に入るのかわかりません。form_list を指定するには、常に id を指定する必要があります。そのため、デフォルトの引数はすべて最後に配置されます。def done(self,request,form_list,id=None)

于 2013-03-06T07:34:28.720 に答える