2010-09-10 17 views
7

Necesito limpiar un campo específico en un formset en línea, y no puedo encontrar la manera de hacerlo.¿Cómo se limpia un determinado campo en un InlineFormSet?

He intentado con el método forms def clean(self) pero no sé dónde guardar el valor limpio. Si intento establecer el valor limpio en forms[0].data['field'], aparece el mensaje "Esta instancia de QueryDict es inmutable".

En formas "normales", funciona utilizando el método def clean_fieldXY(self) en el que I return cleaned_value.

Por favor ayuda.

Respuesta

9

Puede establecer el formset en línea para usar una clase de formulario, y luego puede crear una función clean para el campo.

En 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 

Luego, en myapp/views.py

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

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