나는 이런 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가 발생합니다.
흥미롭게도 높이 필드에 글자를 넣으면 정상적으로 숫자가 입력 될 때 빈 양식에서 유효성 검사 오류를보고하지 않습니다. –