2010-09-10 10 views
7

Ho bisogno di pulire un campo specifico in un formset in linea e non riesco a capire come farlo.Come pulire un determinato campo in un InlineFormSet?

Ho provato con il metodo formet def clean(self) ma non so dove salvare il valore pulito. Se provo a impostare il valore pulito su forms[0].data['field'], ottengo l'errore "Questa istanza di QueryDict è immutabile".

In forme "normali" funziona utilizzando il metodo def clean_fieldXY(self) in cui I return cleaned_value.

Per favore aiuto.

risposta

9

È possibile impostare il formset in linea per utilizzare una classe di modulo e quindi è possibile creare una funzione clean per il campo.

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 

Poi, 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) 
Problemi correlati