اذهب إلى المحتوى

السؤال

نشر

أود أن أحصل على CharField بطول ثابت في النموذج Model.  أريد أن يكون الطول المحدد فقط هو الصحيح. حاولت إستخدام الكود التالي

national_number = models.CharField('National Number', max_length=14, min_length=14)

لكنه يعطيني خطأ (يبدو أنه لا يمكنني استخدام max_length و min_length في نفس الوقت).

كيف أقوم بهذا الأمر في جانغو Django؟

Recommended Posts

  • 1
نشر

يمكنك تثبيت قيمة الحقل عن طريق :

from django.core.exceptions import ValidationError

def validate_length(value,length=6):
    if len(str(value))!=length:
        raise ValidationError(u'%s is not the correct length' % value)

from django.db import models

class MyModel(models.Model):
    constraint_length_charField = models.CharField(validators=[validate_length] , max_length = 6)

حيثُ أن تم تثبيت القيمه في داله و من ثم استدعاؤها في النموذج model الخاص بك من أجل التحقق منها و قد تلاحظ انه قد تم كتابة الأمر max_length مجدداً و ذلك حتى لا تحدث مشكله عن كتابة الأمرين python manage.py makemigrations / python manage.py migrate

أي يجب تحديد قيمة الحقل في كلاً من : length في الداله المطلوب التحقق منها و max_length في الحقل

  • 1
نشر

يُمكنك إشتخدام المُدَقق RegexValidator للتحقق من طول القيمة قبل حفظها في قاعدة البيانات مع مُراعاة أن الرقم الموضوع في العبارة النمطية '^.{10}$' هو نفسه قيمة max_length:

from django.core.validators import RegexValidator #قم باستدعاء المُدقق

class MyModel(models.Model):
	"""
	قم بإضافة المدقق إلى الحقل 
	وقم باستبدال 10 بالطول الذي تُريده
	"""
	national_number = models.CharField('National Number', max_length=10, validators=[RegexValidator(regex='^.{10}$', message='يجب أن يكون طول القيمة يُساوي 10', code='nomatch')])
    

كما يُمكنك إستخدام المُدقق MinLengthValidator مع مُراعاة أن القيمة المُمَرَّرَةُ له هي نفسها قيمة max_length:

from django.core.validators import MinLengthValidator #قم باستدعاء المُدقق

class MyModel(models.Model):
	"""
	قم بإضافة المدقق إلى الحقل 
	وقم باستبدال 10 بالطول الذي تُريده
	"""
	national_number = models.CharField('National Number', max_length=10, validators=[MinLengthValidator(10)])
    

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...