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):, где идентификатор не по умолчанию аргумент ... IAM получает сообщение об ошибке non-default argument follows default argument (views.py, line 130) есть ли способ сделать это?

+0

Не связано с вопросом, но можете ли вы использовать pep8 при форматировании кода - помещать пробелы до и после '=' в местах, где вы назначаете имена переменных - это улучшит код readablitity. –

ответ

3

№ Как показано в сообщении об ошибке, любые аргументы со значениями по умолчанию должны появляться после всех аргументов без значений по умолчанию.

Почему вы чувствуете, что вам нужно добавить новый аргумент посередине? Почему бы просто не сделать def done(self, request, form_list, id=None)? Добавление нового аргумента в середине приведет к поломке всего существующего кода, который вызывает функцию с позиционными аргументами.

+0

Спасибо, BrenBarn, теперь он отлично работает :) – Friend

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)

+0

эй, я ценю ваше четкое объяснение, сейчас он работает :) – Friend

Смежные вопросы