J'ai deux ModelField (Char et Decimal) et il serait trivial de les nettoyer séparément avec la méthode clean_formfield(). Mais au lieu d'afficher les deux champs de formulaire, je voudrais afficher juste un champ de saisie en combinaison avec un champ ChoiceField où l'utilisateur peut décider si la prochaine entrée sera un mot ou un nombre. La scission est nécessaire parce que je voudrais faire une agrégation avec les nombres plus tard.Nettoyer Formfield tardif - nettoyer Formfield dans la sous-classe Form
Il est évident que je ne peux pas utiliser clean_formfield() en raison d'une dépendance, donc il doit aller dans le nettoyeur de formulaires. La question est de savoir comment réaliser un «nettoyage Formfield tardif»?
class Input(models.Model):
...
number = models.DecimalField()
word = models.CharField()
...
class InputForm(forms.ModelForm):
...
type = forms.CharField(widget=forms.RadioSelect(choices=(('word','Word'),('number','Number'),)))
input = forms.CharField()
...
def clean(self):
cleaned_data = self.cleaned_data
type = cleaned_data.get('type')
input = cleaned_data.get('input')
if type == 'number':
<<<clean_Decimal_Formfield>>>
cleaned_data['number'] = input
cleaned_data['word'] = None
else:
<<<clean_Char_Formfield>>>
cleaned_data['number'] = None
cleaned_data['word'] = input
return cleaned_data
ok mais maintenant il vous manque la validation sur le terrain! l'entrée contiendra ou quelque chose de valide pour un charfield ou quelque chose de valable pour un champ décimal! –