Bonjour,
J’utilise les ModelForm afin de générer des formulaires à partir de ma BDD.
Faut-il que la validation se fasse côté BDD (avec, par exemple, RegexValidator, MinLengthValidator ou bien des validateurs custom), auquel cas je modifie, côté formulaire, les messages d’erreur avec error_messages par exemple ?
Ou alors, faut-il que la validation se fasse côté formulaire (en surchargeant clean_nom_du_champs() et clean()) ?
Vous trouverez ci-dessous deux exemples (très) basiques afin d’illustrer ma question.
Méthode n°1
# models.py
from django.db import models
from django.core.validators import RegexValidator
class Table(models.Model):
foo = models.CharField(max_length=50, validators=[RegexValidator(r'^[A-Za-z]+$')])
# forms.py
from django import forms
from .models import Table
class TableForm(forms.ModelForm):
class Meta:
model = Table
fields = ['foo',]
labels = {
'foo': 'Entrez la valeur de foo',
}
error_messages = {
'required': 'mais où est foo ?',
'max_length': 'foo ne peut pas avoir plus de 50 caratères !',
'invalid': 'foo ne peut contenir que des lettres !',
}
Méthode n°2
# models.py
from django.db import models
class Table(models.Model):
foo = models.CharField(max_length=50)
# forms.py
import re
from django import forms
from django.core.exceptions import ValidationError
from .models import Table
class TableForm(forms.ModelForm):
class Meta:
model = Table
fields = ['foo',]
labels = {
'foo': 'Entrez la valeur de foo',
}
def clean_foo(self):
data = self.cleaned_data['foo']
error_messages = {}
if not foo: error_messages['required'] = 'mais où est foo ?'
if len(foo) > 50: error_messages['max_length'] = 'foo ne peut pas avoir plus de 50 caratères !'
if re.match(r'^[A-Za-z]+$', data): error_messages['invalid'] = 'foo ne peut contenir que des lettres !'
raise ValidationError([
ValidationError(_(error_messages['required']), code='required'),
ValidationError(_(error_messages['max_length']), code='max_length'),
ValidationError(_(error_messages['invalid']), code='invalid'),
])
return data
Merci pour votre aide précieuse !
+0
-0