ModelFormのDjango TextField MAX_LENGTH検証
-
13-09-2020 - |
質問
Djangoは、ModelFormの検証中にTextField ModelフィールドのMAX_LENGTH属性を尊重しません。
SO Models.TextFieldから継承され、Models.Charfieldと同様の検証ビットを追加したLimitedTextFieldを定義します。
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)
.
しかしこれはモデルフォーム検証には影響しません。
私は何を見逃していますか?あらゆる助けが大歓迎です。
ありがとう、
OMAT
解決
Django 1.2の時点では、ここで説明したように、モデルレベルでのバリデータによって行うことができます。 https://docs.djangoproject.com/en/stable/ref/validators/a>
from django.core.validators import MaxLengthValidator
class Comment(models.Model):
comment = models.TextField(validators=[MaxLengthValidator(200)])
.
他のヒント
このような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',)
. Django 2.x
のバリデータからMaxLengthValidatorをインポートする必要がないfrom django.db import models
class Comment(models.Model):
comment = models.TextField(max_length=200)
. 所属していません StackOverflow