Django TextField max_length validation for ModelForm
Django在验证模型窗体时不考虑textfield model字段的max_length属性。
因此,我定义了继承自models.textfield的limitedtextfield,并添加了类似models.charfield的验证位:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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) |
但这对模型表单验证仍然没有影响。
我错过了什么?任何帮助都非常感谢。
谢谢,
奥马特
从django 1.2开始,这可以由模型级别的验证器完成,如下所述:https://docs.djangoproject.com/en/stable/ref/validators网站/
1 2 3 4 | from django.core.validators import MaxLengthValidator class Comment(models.Model): comment = models.TextField(validators=[MaxLengthValidator(200)]) |
号
由于django 1.7,您可以使用
您可以通过使用如下文本区域小部件定义charfield来强制textfield的最大长度:
1 2 3 4 5 6 7 8 9 10 11 12 | 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',) |
不需要从django 2.x的验证程序导入maxlengthvalidator
1 2 3 | from django.db import models class Comment(models.Model): comment = models.TextField(max_length=200) |