0

Ich kann benutzerdefinierte Validatoren für meine Django-Modelle haben und was ich tun möchte ist Validierung auf der Formularebene, wo die Formularelemente Abhängigkeiten zueinander haben. Zur Veranschaulichung, sage ich das folgende Modell haben:django modelform Validierung auf der Formularebene

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) 

Die Abhängigkeit ist, dass num_values = num_average * 3. Ich weiß, dass ich das automatisch einstellen kann, aber zu diesem Zweck nehmen wir an, wir wollen die Benutzereingabe. Ich habe ein Formular als:

Gibt es eine Möglichkeit, das Formular als Ganzes zu validieren, bevor das Senden ausgelöst wird?

Antwort

2

Ja, wie die form docs darauf hinweisen, ist diese Art von Sache in einer Methode durchgeführt.

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') 

Als Nebenwirkung sollten Sie __init__ nicht definieren, wenn Sie etwas mit ihm sind nicht zu tun; das Überschreiben einer Methode, nur um die Superklassenmethode aufzurufen, ist sinnlos.

+0

Danke! Das habe ich komplett vermisst. Danke für den Tipp auf "__init__". Ich hatte etwas dort, aber ich entfernte es und ich werde das aufräumen. – Luca

Verwandte Themen