formularios - Validación Django TextField max_length para ModelForm
submit django form (3)
Django no respeta el atributo max_length del campo del modelo TextField al validar un ModelForm.
Así que defino un LimitedTextField heredado de los modelos. TextField y bits de validación agregados similares a los modelos.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)
Pero esto aún no tiene efecto en la validación de ModelForm.
¿Qué me estoy perdiendo? Cualquier ayuda es muy apreciada.
Gracias,
oMat
A partir de Django 1.2, esto se puede hacer mediante validadores a nivel de modelo, como se explica aquí: https://docs.djangoproject.com/en/stable/ref/validators/
from django.core.validators import MaxLengthValidator
class Comment(models.Model):
comment = models.TextField(validators=[MaxLengthValidator(200)])
Desde Django 1.7, puede usar max_length
que solo se aplica en el lado del cliente. Mira aquí
No es necesario importar MaxLengthValidator de validadores para Django 2.x
from django.db import models
class Comment(models.Model):
comment = models.TextField(max_length=200)
Puede aplicar una longitud máxima para un Campo de texto definiendo un CharField con un widget Textarea como este:
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'',)