2013-08-02 2 views
11

나는 쉬운 질문 일 수 있으므로 장고를 처음 사용합니다. ForeignKey가 다른 곳에 두 개의 modelForm을 가지고 있습니다. 나의 주요 목표는 질병 (FK)에 대한 링크가있는 지표를 저장하여 특정 질병에 대해 여러 지표를 가질 수 있도록하는 것입니다.Django 'ManagementForm 데이터가 없거나 외부 키가있는 modelForm을 저장할 때'변조되었습니다.

아래 코드를 사용하면 'ManagementForm 데이터가 없거나 변조되었습니다'라는 메시지가 나타나면 오류가 발생합니다. 또한, views.py의 코드는 return HttpResponseRedirect가있는 세 번째 'if'문에서 유효성 검사를하지 않는 것처럼 보입니다. 그러나 데이터베이스를 검사 할 때 양식의 값이 기록됩니다. 오류가 제기 된 이유에 대한 아이디어가 있습니까? 그것을 고치는 방법?

내 코드는 다음과 같습니다 :

models.py

#Table for Disease 
class Disease(models.Model): 
    disease = models.CharField(max_length=300) 

#Tables for Indicators 
class Indicator(models.Model): 
    relevantdisease = models.ForeignKey(Disease)  
    indicator = models.CharField(max_length=300) 

forms.py

class DiseaseForm(forms.ModelForm): 
    class Meta: 
     model = Disease 

class IndicatorForm(forms.ModelForm): 
    class Meta: 
     model = Indicator 

DiseaseFormSet = inlineformset_factory(Disease, 
    Indicator, 
    can_delete=False, 
    form=DiseaseForm) 

views.py

def drui(request): 

    if request.method == "POST": 

     indicatorForm = IndicatorForm(request.POST) 

     if indicatorForm.is_valid(): 
      new_indicator = indicatorForm.save() 
      diseaseInlineFormSet = DiseaseFormSet(request.POST, request.FILES, instance=new_indicator) 

      if diseaseInlineFormSet.is_valid(): 
      diseaseInlineFormset.save() 
      return HttpResponseRedirect('some_url.html') 

    else: 
     indicatorForm = IndicatorForm() 
     diseaseInlineFormSet = DiseaseFormSet() 

    return render_to_response("drui.html", {'indicatorForm': indicatorForm, 'diseaseInlineFormSet': diseaseInlineFormSet},context_instance=RequestContext(request)) 

template.html

+0

는 https://docs.djangoproject.com/en/stable/topics/forms/formsets/#understanding-the-managementform를 참조하십시오. –

답변

24

템플릿에 diseaseFormSetdiseaseFormSet 관리 양식이 없지만 formset을 인스턴스화하려고 시도했습니다. Formsets는 django에게 설정되어있는 양식의 수를 알려주는 숨겨진 관리 양식을 필요로합니다. 당신의 HTML에

삽입이

{{ diseaseFormSet.as_table }} 
{{ diseaseFormSet.management_form }} 
+0

나는 여전히 같은 오류가 발생합니다. {{indicatorForm.as_table}}을 (를) 꺼내고 위의 두 줄을 추가하면 양식이 완전히 비어 있습니다. {{indicatorForm.as_table}}을 유지하고 {indicatorForm}} 위에 2 줄을 추가하면 양식이 표시되지만 '관리 데이터에 오류가 없습니다'라는 메시지가 표시됩니다. – nlr25

+0

사실, render_to_response에 전달하기 때문에 {{diseaseInlineFormSet.management_form}}을 의미한다고 가정합니다. 이제 내 오류는 "전역 이름 'diseaseInlineFormset'이 정의되지 않았습니다."입니다. 나는이 변수를 어디에 정의해야하는지 잘 모르겠다. ... – nlr25

+0

더 많이 놀았다! 그것은 작동합니다. 내 view.py에 오타가 있었는데이 위치에 diseaseInlineFormSet이 아니라 diseaseInLineFormset이 표시되어야합니다. 또한 {{diseaseInlineFormSet.management_form}}을 전달하는 것이 실제 문제였습니다. 감사! – nlr25