0

Je peux avoir des validateurs personnalisés pour mes modèles django et ce que je voudrais faire est d'effectuer une validation au niveau du formulaire où les éléments de formulaire ont des dépendances les uns avec les autres. Pour illustrer, disons que j'ai le modèle suivant:validation de modelform django au niveau du formulaire

class MyModel(models.Model): 
    num_average = models.IntegerField(verbose_name='Number of averages', 
             default=1) 

    num_values = models.IntegerField(verbose_name='Number of values', 
            default=3) 

La dépendance est que num_values = num_average * 3. Je sais que je peux régler cela automatiquement, mais à cette fin, supposons que nous voulons l'entrée de l'utilisateur. J'ai une forme comme:

class MyForm(ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ['num_average', 'num_values'] 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 

est-il un moyen de valider le formulaire dans son ensemble avant la soumettre se déclenche?

Répondre

2

Oui, comme l'indique le form docs, ce type de chose est fait dans une méthode clean.

class MyForm(ModelForm): 
    class Meta: 
     model = MyModel 
     fields = ['num_average', 'num_values'] 

    def clean(self): 
     data = self.cleaned_data 
     if data['num_values'] != data['num_average'] *3: 
      raise forms.ValidationError('values must be three times average') 

En aparté, vous ne devriez pas définir __init__ si vous ne faites rien avec elle; substituer une méthode juste pour appeler la méthode de superclasse est inutile.

+0

Merci! Complètement manqué cela. Merci pour le conseil sur '__init__'. J'avais quelque chose là mais je l'ai enlevé et je nettoierai ceci. – Luca