2013-02-18 2 views
1

나는 이런 formset 만들었습니다.장고 formset 모든 양식을 확인

class MixedObsCollsForm(forms.Form): 

    def __init__(self, *args, **kwargs): 
     project_id = kwargs.pop('project_id') 
     super(MixedObsCollsForm, self).__init__(*args, **kwargs) 
     project = get_object_or_404(Project, pk=project_id) 
     self.fields['photos_upload'] = forms.ImageField(label="Photos", required=False) 

    taxon = forms.CharField(max_length=80, required=False) 
    growth_form = forms.ChoiceField(choices = growthFormChoice, required=False) 
    height = forms.DecimalField(max_value=99, min_value=0, decimal_places=2, required=True) 
    density = forms.IntegerField(max_value=100, min_value=1, required=False) 

그리고 난 모든 처리를 처리하는 클래스를 사용하여보기에 그것을 표시하는 이상한 방법이 있습니다. 내가보기 유효성을 검사하지 않는 비어있는 해당 formset 내에서조차 형태로이 양식을 렌더링 할 때의

class ObservationFormView(object):  

    def __init__(self, request=None, project_id=None, observation_id=None): 

     self.request = request 
     self.ObservationFormSet = formset_factory(form=MixedObsCollsForm, extra=5) 
     self.ObservationFormSet.form = staticmethod(curry(MixedObsCollsForm, project_id=project_id)) 
     self.project = get_object_or_404(Project, pk=project_id) 



     self.user = request.user 

     self.use_type = 'create' 
     self.formset = self.ObservationFormSet(self.request.POST or None) 


    def isValid(self): 
     return self.formset.is_valid() & self.locationForm.is_valid() 

    def render(self): 
     return render(self.request, 'observation_form.html', {'use_type': self.use_type, 'formset': self.formset, 'locationForm':self.locationForm, 'project_photos': self.project.photos.all(),}) 

    def processForm(self):  

     for form in self.formset: 
      if form.is_valid() == True: 
       if form.cleaned_data['is_collection'] == True: 
        collection = self.getOrMakeCollection(form.cleaned_data, self.locationForm.cleaned_data['location'], False) 
       if form.cleaned_data['is_collection'] == False: 
        collection = self.getOrMakeCollection(form.cleaned_data, self.locationForm.cleaned_data['location'], True) 

       observation = self.saveObservation(form.cleaned_data, self.locationForm.cleaned_data['location'], collection) 


     return observation 

...이 같은 문제입니다. 보고 "이 입력란은 필수입니다." 모든 높이 필드 옆에 있습니다. 심지어 비어있는 것들.

빈 양식은 항상 유효성 검사를 통과해야한다는 것을 알고 있습니다. 관리 양식 데이터를 살펴 봤는데 모두 괜찮아 보입니다.

필수 항목을 False로 변경하면 데이터베이스에 formset을 저장하려고 할 때 IntegrityErrors가 발생합니다.

+0

흥미롭게도 높이 필드에 글자를 넣으면 정상적으로 숫자가 입력 될 때 빈 양식에서 유효성 검사 오류를보고하지 않습니다. –

답변

1

나는 마침내 그것이이 문제를 가지고있는 다른 사람들을 위해 여기에서 간과하기 쉬운 것이 었습니다.

질문에 코드에 포함되지 않았으므로 누구도 제공 할 수있는 도움이별로 없었습니다.

이 줄 :

growth_form = forms.ChoiceField(choices = growthFormChoice, required=False) 

이 같은 선택의 튜플이었다 growthFormChoice 변수를 사용합니다. 따라서 디폴트 값 ('0':'Select One')

growthFormChoice = (('0', 'Select one'), 
        ('T', 'tree'), 
        ('S', 'shrub')) 

는 나머지 필드 검증하지 (의도적으로)이었다 모든 형태의 변경에 0 전달 트리거링 결과. 단순히 ('':'Select One')으로 변경하는 것만으로 충분했습니다.

관련 문제