2

フォームセットの各フォームで 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 関数でエラーがスローされます)。

4

1 に答える 1