Home > Django > Django: Model.field custom validator

Django: Model.field custom validator

Ho un model Season, con un field ‘name’.
Voglio che siano accettati solo nomi con il formato
‘yyyy-yyyy’ es. ‘2016-2017’.
Per essere sicuro che, in sede di creazione da interfaccia
di Admin, venga rispettato questo criterio, posso creare un
validator.

Nella stessa directory dove risiedono i models, creo un file
validators.py con all’interno il mio custom validator.

from django.core.exceptions import ValidationError
import re


def validate_season_name(name):
    pattern = '^\d{4}-\d{4}$'
    if not re.compile(pattern).match(name):
        raise ValidationError('name %s is not correct: yyyy-yyyy is mandatory'\
            % name, params={'name': name},)

Nel file models.py userò il validator direttamente
nella definizione del field ‘name’:

# noinspection PyUnresolvedReferences
from django.db import models
from myapp.validators import validate_season_name


class Season(models.Model):
    name = models.CharField(max_length=9, validators=[validate_season_name])

    def __unicode__(self):
        return self.name

Ovviamente, essendo l’argomento validators una lista, posso utilizzare più validators.

Quando andrò a creare la Season ed inserirò
un nome non desiderat, verrà sollevata l’eccezione.
season_validate_error

Altrimenti tutto sarà ok.
admin_season_ok

Categorie:Django Tag:
  1. Non c'è ancora nessun commento.
  1. No trackbacks yet.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: