How to clean a certain field in a InlineFormSet?

夙愿已清 提交于 2020-01-01 05:10:10

问题


I need to clean a specific field in an inline formset, and I can't figure out how to do it.

I've tried with the formsets def clean(self) method but don't know where to save the cleaned value. If I try to set the cleaned value to forms[0].data['field'] I get "This QueryDict instance is immutable" error.

In "normal" forms it works by using the def clean_fieldXY(self) method in which I return cleaned_value.

Please help.


回答1:


You can set the inline formset to use a form class, and then you can create a clean function for the field.

In myapp/forms.py:

class InlineFormsetForm(forms.Form)
    myfield = forms.CharField(required=False, max_length=50)

    def clean_myfield(self):
        data = self.cleaned_data['myfield']
        if data == 'badinput':
            raise forms.ValidationError("I hates it!")
        return data

Then, in myapp/views.py

from myapp.forms import InlineFormsetForm
from myapp.models import ParentRecord, ChildRecord

def editmything(request):
    MyFormSet = inlineformset_factory(ParentRecord, ChildRecord, form=InlineFormsetForm)


来源:https://stackoverflow.com/questions/3686863/how-to-clean-a-certain-field-in-a-inlineformset

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!