Django 在验证 ModelForm 时不尊重 TextField 模型字段的 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 验证没有影响。
我错过了什么?