Blog

validazione-form-django

Validazione dei vari campi del Form con Django

Guide

Validazione dei vari campi del Form con Django

Come effettuare la validazione dei vari campi del form con Django

La validazione dei dati è un aspetto importantissimo di un sito web, ecco quindi una guida su come effettuare la validazione dei vari campi del form con Django.
In un’altra guida abbiamo spiegato come effettuare l’elaborazione di una richiesta POST, in quel caso proveniente da un Form.
In questo caso ci vogliamo soffermare su come effettuare la validazione specifica per ogni campo di un Form.

Esempio semplicissimo

Mettiamo di avere il seguente form:

from django import forms
class MioForm(forms.Form):
    primo = forms.CharField(label='Primo campo', max_length=100)
    secondo = forms.IntegerField(label='Secondo campo', max_length=100)
    terzo = forms.IntegerField(label='Terzo campo', max_length=100)

Vogliamo che il primo campo sia compreso tra 0 e 20.
Il secondo campo invece deve essere compreso tra 0 e 40.
Il secondo campo deve essere maggiore del primo.
Come fare? Semplicissmo.
Ecco il codice, facilissimo da capire:

from django import forms
# Il mio form mostrato all'inizio
class MioForm(forms.Form):
    primo = forms.CharField(label='Primo campo', max_length=100)
    secondo = forms.IntegerField(label='Secondo campo', max_length=100)
    terzo = forms.IntegerField(label='Terzo campo', max_length=100)
    # I metodi per validare il singolo dato devono avere questo formato clean_<nome_campo>(self)
    def clean_primo(self):
        """Metodo per verificare la validita del campo 'primo' """
        data = self.cleaned_data['recipients']
        numero = int(data)
        if numero < 0 or numero > 20:
            raise forms.ValidationError("Il numero non è compreso tra 0 e 20!")
        # Ritornare sempre data, anche se questa funzione non modifica nulla
        return data
    def clean_secondo(self):
        """Metodo per verificare la validita del campo 'secondo' """
        data = self.cleaned_data['recipients']
        numero = int(data)
        if numero < 0 or numero > 40:
            raise forms.ValidationError("Il numero non è compreso tra 0 e 40!")
        # Ritornare sempre data, anche se questa funzione non modifica nulla
        return data
    def clean(self):
        """Metodo per verificare i dati tra di loro, in questo caso per vedere se secondo è maggiore di primo"""
        cleaned_data = super().clean()
        primo = cleaned_data.get("primo")
        secondo = cleaned_data.get("secondo")
        if primo and secondo:
            # Fai qualcosa sono se entrambi i dati esistono.
            if int(secondo) > int(primo):
                raise forms.ValidationError("Il secondo campo non è maggiore del primo!")

In questo caso i campi del form erano testuali (CharField) quindi prima di verificare i dati li convertiamo in interi. Abbiamo fatto così per mantenere lo stesso form di esempio utilizzato su Coders Italia Forum.

Leave your thought here

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyrighted Image