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

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top