oma*_*mat 28 django django-models django-forms django-validation
在验证ModelForm时,Django不尊重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)
Run Code Online (Sandbox Code Playgroud)
但这对ModelForm验证仍然没有影响.
我错过了什么?任何帮助深表感谢.
谢谢,
OMAT
oma*_*mat 74
从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)])
Run Code Online (Sandbox Code Playgroud)
从Django 1.7开始,您可以使用max_length
仅在客户端强制执行的操作.看这里
Mic*_*all 10
您可以通过使用Textarea小部件定义CharField来强制TextField的最大长度,如下所示:
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',)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29452 次 |
最近记录: |