Django Textfield Max_Length Validation pour Modelform
-
13-09-2020 - |
Question
Django ne respecte pas l'attribut max_length du champ modèle Textfield tout en validant un modelform.
Je définis donc un champ limité hérité des modèles.Textfield et ajout de bits de validation similaires à des modèles.Charfield:
from django.core import validators
class LimitedTextField(models.TextField):
def __init__(self, *args, **kwargs):
super(LimitedTextField, self).__init__(*args, **kwargs)
self.max_length = kwargs.get('max_length')
if self.max_length:
self.validators.append(validators.MaxLengthValidator(self.max_length))
def formfield(self, **kwargs):
defaults = {'max_length': self.max_length}
defaults.update(kwargs)
return super(LimitedTextField, self).formfield(**defaults)
Mais cela n'a toujours aucun effet sur la validation de Modelform.
Qu'est-ce que je manque?Toute aide est très appréciée.
merci,
omat
La solution
AS de Django 1.2 Cela peut être fait par des validateurs au niveau du modèle, comme expliqué ici: https://docs.djangoproject.com/fr/stable/ref/validators/
from django.core.validators import MaxLengthValidator
class Comment(models.Model):
comment = models.TextField(validators=[MaxLengthValidator(200)])
Depuis Django 1.7, vous pouvez utiliser max_length
qui n'est appliqué que du côté du client. voir ici
Autres conseils
Vous pouvez appliquer une longueur maximale pour un champ de texte en définissant un charfield avec un widget Texarea comme celui-ci:
class MyClass(models.Model):
textfield = models.TextField()
class MyForm(forms.ModelForm):
textfield = forms.CharField(
max_length = 50,
widget = forms.Textarea
)
class Meta:
model = MyClass
fields = ('textfield',)
Pas besoin d'importer maxlengthValidator à partir de validateurs pour Django 2.x
from django.db import models
class Comment(models.Model):
comment = models.TextField(max_length=200)