سؤال

لا يحترم 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top