2013-04-17 7 views
1

Я пытаюсь использовать значения String из CharField в каждой форме набора форм, однако по какой-либо причине очищенные_данные для каждой формы всегда кажутся пустыми, в то время как чистые данные набора форм не являются. Вот код из моего views.py:Очищенная_файла формы пуста, но cleaned_data formset isnt?

TagsFormSet = formset_factory(TagsForm, formset=TagFormSet, extra=applicantQuery.count()) 
    if request.method == 'POST': 
     tags_formset = TagsFormSet(request.POST, request.FILES, prefix='tags', applicants=applicantQuery) 
     if tags_formset.is_valid(): 
      for tagForm in tags_formset.forms: 
       tagForm.saveTags() 

где моя форма выглядит следующим образом:

class TagFormSet(BaseFormSet): 

def __init__(self, *args, **kwargs): 
    applicants = kwargs.pop('applicants') 
    super(TagFormSet, self).__init__(*args, **kwargs) 
    #after call to super, self.forms is populated with the forms 

    #associating first form with first applicant, second form with second applicant and so on 
    for index, form in enumerate(self.forms): 
     form.applicant = applicants[index] 

class TagsForm(forms.Form): 
    tags = forms.CharField() 
    def __init__(self, *args, **kwargs): 
     super(TagsForm, self).__init__(*args, **kwargs) 
     self.fields['tags'].required = False; 

    def saveTags(self): 
     Tag.objects.update(self.applicant, self.cleaned_data['tags']) 

Как я уже говорил ранее, tags_formset.cleaned данных содержит правильную информацию, введенный в на странице, однако очищенные данные формы пустые. Этот код дает мне ошибку KeyValue, в которой «теги» не находятся в очищенных данных, так как в ней ничего нет (ошибка, вызванная функцией saveTags).

ответ

0

Хорошо, я только что понял, что происходит (ничего себе я немой). Ошибка возникает из-за того, что я сделал tags.required False, но вызывать saveTags, независимо от того, были ли в этой конкретной форме введенные значения. Простое исправление заключалось в том, чтобы проверить, не был ли чист cleaned_data пустым:

if tags_formset.is_valid(): 
    for tagForm in tags_formset.forms: 
     #check if cleaned_data is non-empty 
     if tagForm.cleaned_data: 
      tagForm.saveTags()