Django在验证ModelForm时不尊重TextField model field的max_length属性.

因此,我定义了一个继承自Models.TextField的LimitedTextField,并添加了类似于Models.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)

但这仍然不会影响ModelForm验证.

我遗漏了什么?

推荐答案

从Django 1.2开始,这可以由模型级别的验证器完成,如下所述: https://docs.djangoproject.com/en/stable/ref/validators/

from django.core.validators import MaxLengthValidator

class Comment(models.Model):
    comment = models.TextField(validators=[MaxLengthValidator(200)])

自Django 1.7以来,您可以使用max_length,它只在客户端强制执行.See here

Django相关问答推荐

Django相关对象引用模板

Django模型ManyToManyField.Add不起作用

Djnago admin中 Select 字段的自定义查询

Django Admin:在一个部分中同时显示多个应用程序?

Templatetag 在 Django 4.2 模板 IF 条件中不起作用

Django中的InvalidOperation错误[]

int_list_validator在 Django 表单中不起作用

Django - 使用在 URL 中传递的父类主键从子类中过滤对象

如何解决 AssertionError: .accepted_renderer not set on Response in django and ajax

恢复 Django 1.7 RemoveField 迁移

Django:在模板中显示当前语言环境

Django ModelForm 没有指定模型类

Django:使用 ModelForm 编辑现有数据库条目

Django JavaScript 文件

UnicodeEncodeError:ascii编解码器无法编码字符

django admin 排序外键字段列表

如何在 django 中捕获UNIQUE constraint failed404

Django:AppRegistryNotReady()

关闭 Django Rest Framework ModelViewSet 的自动分页

Django 测试客户端方法覆盖标头