Проверка подлинности Django TextField max_length для ModelForm
Django не учитывает атрибут max_length поля модели TextField при проверке ModelForm.
Итак, я определяю LimitedTextField, унаследованный от моделей. TextField и добавленные биты проверки, похожие на 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.
Что мне не хватает? Любая помощь очень ценится.
Спасибо,
Omat
Ответы
Ответ 1
Как и в 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
, который применяется только на стороне клиента. Смотрите здесь
Ответ 2
Вы можете обеспечить максимальную длину для TextField, указав CharField с виджетом Textarea следующим образом:
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',)