2014-04-15 3 views
3

최소한 첫 번째 행이 필요하도록 인라인 _ 형식을 변환하려고하면 위의 오류가 발생합니다. (please see here for the StackOverflow question)BaseModelFormSet __init __()에 예기치 않은 키워드 인수가 있습니다.

내 기존의 코드는 다음과 같습니다 :

class BaseFormSet(BaseModelFormSet): 
    def __init__(self, *args, **kwargs): 
     super(BaseFormSet, self).__init__(*args, **kwargs) 
     for form in self.forms: 
      form.empty_permitted = False 

다음과 같이 사용할 통과 :

는 해당 formset을 정의하기 위해
#views.py 
def application(request, job_id): 
    job = get_object_or_404(Job, pk=job_id) 
    #return 404 if job isn't yet published 
    if (job.pub_date>timezone.now() or job.close_date<timezone.now()): 
     return HttpResponseNotFound('<h1>Job not found</h1>') 

    #create all the inlineformsets (can_delete) set to false as will always be empty upon population 
    EducationInlineFormSet = inlineformset_factory(Applicant, Education, extra=1, can_delete=False) 
    QualificationInlineFormSet = inlineformset_factory(Applicant, Qualification, extra=1, can_delete=False) 
    EmploymentInlineFormSet = inlineformset_factory(Applicant, Employment, extra=1, can_delete=False) 

    if request.method == 'POST': 
     applicant = Applicant(job=job) 
     form = ApplicantForm(request.POST, instance=applicant) 
     bottom_form = ApplicantFormBottom(request.POST, instance=applicant) 
     education_formset = EducationInlineFormSet(request.POST, instance=applicant) 
     qualification_formset = QualificationInlineFormSet(request.POST, instance=applicant) 
     employment_formset = EmploymentInlineFormSet(request.POST, instance=applicant) 

     #check all of the forms and formsets are valid 
     if form.is_valid() and bottom_form.is_valid() and education_formset.is_valid() and qualification_formset.is_valid() and employment_formset.is_valid(): 
      # save the model to database, directly from the form: 
      form.save() 
      bottom_form.save() 
      education_formset.save() 
      qualification_formset.save() 
      employment_formset.save() 
      return render(request, 'jobs/success.html') 


    else: 
     applicant = Applicant(job=job) 
     form = ApplicantForm(instance=applicant) 
     bottom_form = ApplicantFormBottom(instance=applicant) 
     education_formset = EducationInlineFormSet(instance=applicant) 
     qualification_formset = QualificationInlineFormSet(instance=applicant) 
     employment_formset = EmploymentInlineFormSet(instance=applicant) 


    c = { 
    'job' : job, 
    'form' : form , 
    'bottom_form' : bottom_form, 
    'education_formset' : education_formset, 
    'qualification_formset' : qualification_formset, 
    'employment_formset' : employment_formset, 
    } 
    return render(request, 'jobs/application.html', c) 

나는 다음과 같은 정의

EducationInlineFormSet = inlineformset_factory(Applicant, Education, extra=1, can_delete=False, formset=BaseFormSet) 

이것은 위의 오류를 반환하고 주위를 많이 읽은 나는 아직도 아무도 내가 얼마나 현명한 지 알 수 없다. 인스턴스를 formset에 계속 전달하십시오.

도움을 주시면 감사하겠습니다.

감사합니다,

크리스.

답변

5

비슷한 문제가 발생했습니다. 문제는 사용자 지정된 formset입니다.

BaseInlineFormSet (BaseModelFormSet이 아님)에서 서브 클래 싱을 시도하십시오.

여기는 the docs의 관련 섹션입니다.

관련 문제