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

السؤال

نشر

عادة لما بدنا نضيف حقل قاعدة بيانات ضمن الdjango نكتب التعليمة

models.CharField(max_length=100, null=True, blank=True)

بدي اعرف الفرق بين اني اكتب:

1- null = True لوحدها

2- blank = True لوحدها

3- null = True, blank = True  سوا

Recommended Posts

  • 1
نشر

عند تحديد null = true، سيقوم إطار العمل بوضع القيمة الافتراضية للعمود ضمن جدول البيانات ب null ويقبل إدخالها كقيمة فارغة في قاعدة البيانات وعكسها NOT NULL.

blank = true نستطيع عندها جعل هذا الحقل اختياري (ليس إجباري not required). أما blank = false سيكون حقل إجباري عند التحقق من المدخلات في المخدم مثل:

someForm.is_valid();

إذا تستخدم الخاصتين لجعل حقل ما قابل لأن يكون فارغ (بدون بيانات) والسماح بوضع القيمة null في قاعدة البيانات.

لكن الحقلين CharFields and TextField عندما تكون قيمتهم فارغة لا يتم تخزينهم على شكل null إنما كسلسلة نصية فارغة ' ' في Django بالمقابل في قواعد البيانات تقبل null للسلاسل حيث يفضل الاقتصار على blank=True.

null=True/False related to database           # تتعلق بقواعد البيانات

blank=True/False related to form validation   # تتلق بالتحقق ضمن إطار العمل

التوثيق : docs.djangoproject.com

  • 0
نشر

كلاهما يفعل نفس الشيء تقريبًا ، كما يوحي الاسم ولكن هنا الفرق:

Null: إنه متعلق بقاعدة البيانات. يحدد ما إذا كان عمود قاعدة بيانات معين سيقبل القيم الخالية أم لا.
Blank: يتعلق بالتحقق من الصحة. سيتم استخدامه أثناء التحقق من صحة النماذج ، عند استدعاء form.is_valid ().
ومع ذلك ، من الجيد تمامًا أن يكون لديك حقل به قيمة Null = True و Blank = False. بمعنى على مستوى قاعدة البيانات ، يمكن أن يكون الحقل فارغًا ، ولكنه حقل مطلوب في مستوى التطبيق.

  • 0
نشر

فيما يلي كيف يقوم ال ORM بتحقيق blank و null  في دجانغو 1.8 
 

class Test(models.Model):
    charNull        = models.CharField(max_length=10, null=True)
    charBlank       = models.CharField(max_length=10, blank=True)
    charNullBlank   = models.CharField(max_length=10, null=True, blank=True)

    intNull         = models.IntegerField(null=True)
    intBlank        = models.IntegerField(blank=True)
    intNullBlank    = models.IntegerField(null=True, blank=True)

    dateNull        = models.DateTimeField(null=True)
    dateBlank       = models.DateTimeField(blank=True)
    dateNullBlank   = models.DateTimeField(null=True, blank=True)    

أما قاعدة البيانات فيتم إنشائها كما يلي في  PostgreSQL 9.4:

CREATE TABLE Test (
  id              serial                    NOT NULL,

  "charNull"      character varying(10),
  "charBlank"     character varying(10)     NOT NULL,
  "charNullBlank" character varying(10),

  "intNull"       integer,
  "intBlank"      integer                   NOT NULL,
  "intNullBlank"  integer,

  "dateNull"      timestamp with time zone,
  "dateBlank"     timestamp with time zone  NOT NULL,
  "dateNullBlank" timestamp with time zone,
  CONSTRAINT Test_pkey PRIMARY KEY (id)
)

 أما في MySQL 5.6 :
 

CREATE TABLE Test (
     `id`            INT(11)     NOT  NULL    AUTO_INCREMENT,

     `charNull`      VARCHAR(10) NULL DEFAULT NULL,
     `charBlank`     VARCHAR(10) NOT  NULL,
     `charNullBlank` VARCHAR(10) NULL DEFAULT NULL,

     `intNull`       INT(11)     NULL DEFAULT NULL,
     `intBlank`      INT(11)     NOT  NULL,
     `intNullBlank`  INT(11)     NULL DEFAULT NULL,

     `dateNull`      DATETIME    NULL DEFAULT NULL,
     `dateBlank`     DATETIME    NOT  NULL,
     `dateNullBlank` DATETIME    NULL DEFAULT NULL
)

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...