2010-09-10 4 views
7

Je dois nettoyer un champ spécifique dans un formset en ligne, et je n'arrive pas à comprendre comment le faire.Comment nettoyer un certain champ dans un InlineFormSet?

J'ai essayé avec la méthode forms12 def clean(self) mais je ne sais pas où enregistrer la valeur nettoyée. Si j'essaye de placer la valeur nettoyée à forms[0].data['field'] j'obtiens l'erreur "cette instance de QueryDict est immutable".

Dans les formes "normales", il fonctionne en utilisant la méthode def clean_fieldXY(self) dans laquelle I return cleaned_value.

Aidez-nous s'il vous plaît.

Répondre

9

Vous pouvez définir le formset en ligne pour utiliser une classe de formulaire, puis vous pouvez créer une fonction clean pour le champ.

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 

Puis, 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) 
Questions connexes