Cleaned_data формы пуст, а cleaned_data формы не?
Я пытаюсь использовать значения String из CharField в каждой форме набора форм, однако по некоторым причинам cleaned_data для каждой формы всегда отображается пустым, а очищенные данные набора форм - нет. Вот код из моего views.py:
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).
1 ответ
Хорошо, я только что понял, что происходит (вау, я тупой). Ошибка возникает из-за того, что я сделал 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()