Django TextField MAX_LENGHT 모델의 유효성 검사
-
13-09-2020 - |
문제
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 유효성 검사에 영향을 미치지 않습니다.
누락 된 것입니까?어떤 도움도 감사합니다.
감사합니다
omat
해결책
Django 1.2의
여기에서 설명한대로 모델 수준의 유효성 검사기로 수행 할 수 있습니다. https://docs.djangoproject.com/en/stable/ref/validators/kn/stable/ref/validators/ka>
from django.core.validators import MaxLengthValidator
class Comment(models.Model):
comment = models.TextField(validators=[MaxLengthValidator(200)])
.
Django 1.7 이후 클라이언트 측에서만 적용되는 max_length
를 사용할 수 있습니다. 여기를 참조하십시오
다른 팁
텍스트 필드에 대한 최대 길이를 다음과 같이 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