التحقق من صحة Django TextField max_length لـ ModelForm
-
13-09-2020 - |
سؤال
لا يحترم Django سمة max_length لحقل نموذج TextField أثناء التحقق من صحة ModelForm.
لذلك قمت بتعريف LimitedTextField الموروثة من النماذج.TextField وإضافة وحدات التحقق من الصحة المشابهة للنماذج.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/
from django.core.validators import MaxLengthValidator
class Comment(models.Model):
comment = models.TextField(validators=[MaxLengthValidator(200)])
منذ جانغو 1.7، يمكنك استخدام max_length
والذي يتم فرضه فقط في جانب العميل. انظر هنا
نصائح أخرى
يمكنك إنفاذ طول الأقصى لطول TextField عن طريق تحديد Charfield مع عنصر واجهة مستخدم Textarea مثل هذا:
giveacodicetagpre.لا حاجة لاستيراد MaxLivendValidator من Professators ل Django 2.x
giveacodicetagpre.