如何在Python Django表单中传递带默认参数的非默认参数

0 投票
2 回答
5327 浏览
提问于 2025-04-17 18:06

这是我的代码

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),请问有什么办法解决这个问题吗?

2 个回答

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)

3

不可以。正如错误信息所说,任何带默认值的参数必须放在所有不带默认值的参数后面。

你为什么觉得需要在中间添加这个新参数呢?为什么不直接写成 def done(self, request, form_list, id=None) 呢?在中间添加新参数会导致所有用位置参数调用这个函数的现有代码都出问题。

撰写回答