अंतर null = सत्य, रिक्त = django में सत्य


901

जब हम django में एक डेटाबेस फील्ड जोड़ते हैं तो हम आम तौर पर लिखते हैं:

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

के साथ भी यही किया जाता है ForeignKey, DecimalFieldआदि होने में मूल अंतर क्या है

  1. null=True केवल
  2. blank=True केवल
  3. null=True, blank=True

अलग (के संबंध में CharField, ForeignKey, ManyToManyField, DateTimeField) क्षेत्र। 1/2/3 का उपयोग करने के क्या फायदे / नुकसान हैं?


8
आपके पास यहाँ इसके बारे में अच्छे उत्तर हैं: stackoverflow.com/questions/8159310/… और यहाँ: stackoverflow.com/questions/4384098/…
juliomalegria


हाँ, मैं भी साथ इस USECASE है ForeignKeyके साथ blank=Trueहै, लेकिन बिना null=True। जब मॉडल सहेजा जाता है, तो मैं इसमें से एक प्रकाशित प्रविष्टि बनाकर इसे स्वचालित रूप से "प्रकाशित" करना चाहता हूं। इसलिए मैं nullडेटाबेस को नहीं बचा सकता , जैसा कि प्रत्येक मॉडल को "प्रकाशित" करना होता है, लेकिन मैं व्यवस्थापक के क्षेत्र को खाली छोड़ने में सक्षम होना चाहता हूं।
osa

मुझे लगता है कि आपको [खाली खाली, अशक्त चारफिल्ड के रूप में रिक्त स्ट्रिंग के बजाय अशक्त] ( code.djangoproject.com/ticket/4136 ) में रुचि हो सकती है । इस बारे में कई चर्चाएं हैं, और एक बहुत ही व्यावहारिक समस्या जिसका आप सामना कर सकते हैं (जैसे। आप प्रत्येक उपयोगकर्ता के लिए एक ओपन यूआरएल जोड़ना चाहते हैं जो अशक्त हो सकता है और अद्वितीय होना चाहिए)।
ramwin

जवाबों:


1081

null=Trueआपके DB में कॉलम पर सेट NULL(बनाम NOT NULL)। Django फ़ील्ड प्रकारों के लिए रिक्त मान जैसे DateTimeFieldया DB में ForeignKeyसंग्रहीत किए जाएंगे NULL

blankनिर्धारित करता है कि फ़ील्ड रूपों में आवश्यक होगा या नहीं। इसमें व्यवस्थापक और आपके कस्टम रूप शामिल हैं। यदि blank=Trueतब फ़ील्ड की आवश्यकता नहीं होगी, जबकि यदि यह Falseफ़ील्ड रिक्त नहीं हो सकती है।

दोनों का कॉम्बो अक्सर इसलिए होता है क्योंकि आमतौर पर यदि आप किसी फ़ील्ड को अपने फॉर्म में खाली होने देते हैं, तो आपको NULLउस फ़ील्ड के मानों को अनुमति देने के लिए अपने डेटाबेस की भी आवश्यकता होती है । अपवाद CharFieldएस और TextFieldएस है, जो Django के रूप में कभी नहीं बचाया जाता है NULL। खाली मान को रिक्त स्ट्रिंग ( '') के रूप में DB में संग्रहीत किया जाता है ।

कुछ उदाहरण:

models.DateTimeField(blank=True) # raises IntegrityError if blank

models.DateTimeField(null=True) # NULL allowed, but must be filled out in a form

जाहिर है, उन दो विकल्पों का उपयोग करने के लिए तार्किक अर्थ नहीं है (हालांकि null=True, blank=Falseयदि आप चाहते हैं कि शेल के समान किसी वस्तु के माध्यम से किसी वस्तु के साथ काम करते समय वैकल्पिक रूप से फ़ील्ड की आवश्यकता हो , तो आप इसके लिए उपयोग कर सकते हैं।)

models.CharField(blank=True) # No problem, blank is stored as ''

models.CharField(null=True) # NULL allowed, but will never be set as NULL

CHARऔर TEXTप्रकार NULLDjango द्वारा कभी भी सहेजे नहीं जाते हैं , इसलिए null=Trueअनावश्यक है। हालाँकि, आप इसे मैन्युअल रूप से सेट करने के Noneलिए इनमें से किसी एक फ़ील्ड को सेट कर सकते हैं NULL। यदि आपके पास एक परिदृश्य है जहाँ यह आवश्यक हो सकता है, तो आपको अभी भी शामिल होना चाहिए null=True


8
IntegrityErrorजब Django डेटाबेस में रिकॉर्ड को सहेजने का प्रयास करता है तो उठाया जाता है। उपयोगकर्ता द्वारा फ़ील्ड को भरने की आवश्यकता नहीं है, और यह समस्या है क्योंकि डेटाबेस स्तर पर यह शून्य नहीं है।
क्रिस प्रैट

5
नहीं, क्रिस इंगित करने की कोशिश कर रहा है कि क्यों रिक्त = शून्य के बिना सही है = सही एक DateTimeField में समस्याओं का कारण होगा।
विनोद कुरुप

4
ओरेकल यूजर्स को ध्यान दें: यह सच नहीं है कि " CHARऔर TEXTअभी NULLतक Django द्वारा सहेजे नहीं गए हैं "। यह अधिकांश बैकएंड के लिए सही है, लेकिन ओरेकल NULL को एक खाली स्ट्रिंग लागू करेगा, इसलिए Django Oracle बैकेंड उपरोक्त कथन के लिए एक अपवाद है Django डॉक्स
stv

10
@ChrisPratt आपकी पोस्ट पर मामूली सुधार: यदि आप शून्य = सही सेट करते हैं, तो CharFields डेटाबेस में NULL ( पायथन में अनुवाद करना ) के रूप में सहेजा जा सकता हैNoneडॉक्स भी अशक्त = सच की स्थापना क्योंकि यह "blanky" मूल्यों दो भिन्न प्रकार की अनुमति देता है से बचने के लिए कहते हैं। मैं सिर्फ Django 1.8 / MySQL 5.6 के साथ इस व्यवहार का परीक्षण करता हूं
एडवर्ड डिसूजा

3
कोई भी नहीं के संयोजन का उल्लेख करने जा रहा है: blank=True, null=False, default="something"?
ब्रायन एच।

124

यह कैसे DjM 1.8 के लिए ORM नक्शे blankऔर nullफ़ील्ड है

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
)

41
दूसरे शब्दों में, blankडेटाबेस पर कोई प्रभाव नहीं पड़ता है, और यह nullनियंत्रित करता है कि डेटाबेस कॉलम NULLमानों की अनुमति देता है या नहीं। यह उत्तर यह कहने का एक लंबा तरीका है, और इसके बारे में कोई उपयोगी जानकारी प्रदान नहीं करता है blank
कार्ल मेयर

19
@CarlMeyer: मैं यह देखना चाहता था कि यह डेटाबेस के लिए कैसा होगा और साझा किया जाएगा क्योंकि यह दूसरों को भी ऐसा करने के लिए समय बचाएगा। थ्योरी बनाम उदाहरण से फर्क पड़ता है जब यह याद करने और आत्मसात करने की बात आती है। वास्तव में, मैं उस डेटाबेस के लिए मैपिंग जोड़ने के तरीके से बाहर निकल गया जिसका मैं उपयोग नहीं कर रहा था। चढ़ाव के लिए धन्यवाद। जितने लोगों को यह उपयोगी लगा, वे जाहिर तौर पर आपसे असहमत हैं।
उपयोगकर्ता

5
यदि आप प्रस्तुत डेटा से कुछ सारांश निष्कर्ष निकालते हैं तो यह एक उपयोगी उत्तर हो सकता है, लेकिन मुझे नहीं लगता कि कच्चा डेटा डंप पेश करना एक उपयोगी उत्तर है। इस मामले में यह वास्तव में एक भ्रामक उत्तर है, क्योंकि (आगे की टिप्पणी के बिना) यह तात्पर्य है कि दोनों का प्रभाव blankऔर nullडेटाबेस कॉलम में परिलक्षित होना चाहिए, जब वास्तव में blankकेवल पायथन हैंडलिंग को प्रभावित करता है, डेटाबेस कॉलम नहीं। दूसरों को उत्थान करने के लिए स्वतंत्र हैं यदि वे इसे उपयोगी पाते हैं; यह उन लोगों के लिए भी संभव है जो गुमराह करने वाले उत्तर से गुमराह हो जाते हैं यह सोचने के लिए कि यह उपयोगी था।
कार्ल मेयर

4
स्वीकृत उत्तर जो लगभग 3 वर्ष पुराना है, सब कुछ विस्तार से बताता है। यहाँ एक ही जानकारी को दोहराने का कोई मतलब नहीं है।
उपयोगकर्ता

48

जैसा कि Django मॉडल फील्ड संदर्भ में कहा गया है: लिंक

क्षेत्र विकल्प

निम्नलिखित तर्क सभी क्षेत्र प्रकारों के लिए उपलब्ध हैं। सभी वैकल्पिक हैं।


null

Field.null

यदि True, Django NULLडेटाबेस में के रूप में खाली मान संग्रहीत करेगा । डिफ़ॉल्ट है False

nullस्ट्रिंग-आधारित फ़ील्ड्स जैसे कि CharFieldऔर TextFieldक्योंकि रिक्त स्ट्रिंग मानों को हमेशा खाली स्ट्रिंग के रूप में संग्रहीत किया जाएगा, के रूप में उपयोग करने से बचें NULL। यदि एक स्ट्रिंग-आधारित फ़ील्ड है null=True, तो इसका अर्थ है कि "कोई डेटा नहीं" के लिए दो संभावित मान हैं: NULLऔर खाली स्ट्रिंग। ज्यादातर मामलों में, "कोई डेटा नहीं" के लिए दो संभावित मान होना अतिरेक है; Django सम्मेलन खाली स्ट्रिंग का उपयोग करने के लिए है, नहीं NULL

दोनों स्ट्रिंग-आधारित और गैर-स्ट्रिंग-आधारित फ़ील्ड के लिए, आपको यह भी सेट blank=Trueकरना होगा कि क्या आप प्रपत्रों में रिक्त मानों को अनुमति देना चाहते हैं, क्योंकि nullपैरामीटर केवल डेटाबेस संग्रहण (देखें blank) को प्रभावित करता है ।

ध्यान दें

Oracle डेटाबेस बैकएंड का उपयोग करते समय, इस विशेषता की परवाह किए बिना रिक्त स्ट्रिंग को निरूपित करने के लिए NULL को संग्रहीत किया जाएगा


blank

Field.blank

यदि True, फ़ील्ड रिक्त होने की अनुमति है। डिफ़ॉल्ट है False

ध्यान दें कि यह इससे भिन्न है nullnullविशुद्ध रूप से डेटाबेस से संबंधित है, जबकि blankमान्यता-संबंधित है। यदि कोई फ़ील्ड है blank=True, तो प्रपत्र सत्यापन एक रिक्त मान दर्ज करने की अनुमति देगा। यदि कोई फ़ील्ड है blank=False, तो फ़ील्ड की आवश्यकता होगी।


46

यह समझना महत्वपूर्ण है कि Django मॉडल फ़ील्ड परिभाषा में विकल्प (कम से कम) दो उद्देश्य हैं: डेटाबेस तालिकाओं को परिभाषित करना, और डिफ़ॉल्ट प्रारूप और मॉडल रूपों की मान्यता को परिभाषित करना। (मैं कहता हूं "डिफ़ॉल्ट" क्योंकि मानों को हमेशा कस्टम रूप प्रदान करके ओवरराइड किया जा सकता है।) कुछ विकल्प डेटाबेस को प्रभावित करते हैं, कुछ विकल्प रूपों को प्रभावित करते हैं, और कुछ दोनों को प्रभावित करते हैं।

जब यह आता है nullऔर blank, अन्य उत्तरों ने पहले ही स्पष्ट कर दिया है कि पूर्व डेटाबेस तालिका परिभाषा को प्रभावित करता है और बाद वाला मॉडल सत्यापन को प्रभावित करता है। मुझे लगता है कि सभी चार संभव विन्यासों के उपयोग के मामलों को देखकर भेद को और भी स्पष्ट किया जा सकता है:

  • null=False, blank=False: यह डिफ़ॉल्ट विन्यास और इसका मतलब है कि मूल्य सभी परिस्थितियों में आवश्यक है।

  • null=True, blank=True: इसका मतलब है कि क्षेत्र सभी परिस्थितियों में वैकल्पिक है। (जैसा कि नीचे उल्लेख किया गया है, हालांकि, यह स्ट्रिंग-आधारित फ़ील्ड को वैकल्पिक बनाने के लिए अनुशंसित तरीका नहीं है।)

  • null=False, blank=True: इसका मतलब है कि प्रपत्र एक मूल्य की आवश्यकता नहीं है, लेकिन डेटाबेस करता है। इसके लिए उपयोग के कई मामले हैं:

    • वैकल्पिक स्ट्रिंग-आधारित फ़ील्ड के लिए सबसे आम उपयोग है। जैसा कि प्रलेखन में उल्लेख किया गया है , Django मुहावरा एक लापता मूल्य को इंगित करने के लिए खाली स्ट्रिंग का उपयोग करना है। यदि NULLआपको अनुमति दी गई थी तो आप एक लापता मूल्य को इंगित करने के लिए दो अलग-अलग तरीकों से समाप्त होंगे।

    • एक और सामान्य स्थिति यह है कि आप एक फ़ील्ड को दूसरे के मान के आधार पर स्वचालित रूप से गणना करना चाहते हैं (अपनी save()विधि में, कहते हैं)। आप नहीं चाहते कि उपयोगकर्ता किसी फ़ॉर्म (इसलिए blank=True) में मूल्य प्रदान करे , लेकिन आप चाहते हैं कि डेटाबेस यह सुनिश्चित करे कि एक मूल्य हमेशा प्रदान किया जाए ( null=False)।

    • एक अन्य उपयोग तब होता है जब आप इंगित करना चाहते हैं कि एक ManyToManyFieldवैकल्पिक है। क्योंकि यह फ़ील्ड डेटाबेस कॉलम के बजाय एक अलग तालिका के रूप में कार्यान्वित की जाती है, nullअर्थहीन हैblankवसीयत का मूल्य अभी भी रूपों को प्रभावित करेगा, हालांकि, कोई संबंध नहीं होने पर सत्यापन को नियंत्रित करना सफल होगा या नहीं।

  • null=True, blank=False: इसका मतलब है कि प्रपत्र एक मूल्य की आवश्यकता है लेकिन डेटाबेस नहीं करता है। यह सबसे अधिक इस्तेमाल किया जाने वाला कॉन्फ़िगरेशन हो सकता है, लेकिन इसके लिए कुछ उपयोग मामले हैं:

    • अपने उपयोगकर्ताओं को हमेशा एक मूल्य शामिल करना आवश्यक है, भले ही यह आपके व्यावसायिक तर्क द्वारा वास्तव में आवश्यक न हो, यह पूरी तरह से उचित है। आखिरकार, प्रपत्र डेटा जोड़ने और संपादित करने का केवल एक तरीका है। आपके पास ऐसा कोड हो सकता है जो डेटा उत्पन्न कर रहा है, जिसे उसी कड़ी सत्यापन की आवश्यकता नहीं है जिसे आपको मानव संपादक की आवश्यकता है।

    • एक अन्य उपयोग का मामला जो मैंने देखा है जब आपके पास है ForeignKeyजिसके लिए आप कैस्केड हटाने की अनुमति नहीं देना चाहते हैं । यही है, सामान्य उपयोग में संबंध हमेशा होना चाहिए ( blank=False), लेकिन अगर वह चीज़ हटने के लिए इंगित करती है, तो आप इस ऑब्जेक्ट को भी हटाना नहीं चाहते हैं। उस मामले में आप उपयोग कर सकते हैं null=Trueऔर on_delete=models.SET_NULLएक सरल प्रकार के नरम विलोपन को लागू कर सकते हैं ।


1
यह एक सटीक उत्तर है, सभी संभव संयोजनों को बहुत ही संक्षिप्त तरीके से समझाया गया है!
रूसी

1
स्वीकृत उत्तर होना चाहिए।
टॉम मैक

28

आपके पास इसका जवाब हो सकता है लेकिन इस दिन तक यह आंकना मुश्किल है कि अशक्त करना सही है या रिक्त = सत्य है या किसी क्षेत्र में दोनों है। मुझे व्यक्तिगत रूप से लगता है कि यह बहुत बेकार है और डेवलपर्स को इतने सारे विकल्प प्रदान करने के लिए भ्रमित करता है। हालांकि वे चाहते हैं कि नल या रिक्त स्थान को संभालने दें।

मैं इस तालिका का अनुसरण करता हूं, Django के दो स्कूप से :यहां छवि विवरण दर्ज करें

प्रत्येक फ़ील्ड प्रकार के लिए रिक्त या रिक्त उपयोग करने के लिए तालिका दिखा रहा है


26

बस null=Trueडेटाबेस को NULLमानों को स्वीकार करना चाहिए , दूसरी ओर blank=Trueप्रपत्र सत्यापन पर परिभाषित करना चाहिए कि इस क्षेत्र को रिक्त मानों को स्वीकार करना चाहिए या नहीं (यदि blank=Trueयह उस क्षेत्र में मान के बिना फॉर्म को स्वीकार करता है और blank=False[डिफ़ॉल्ट मान] फॉर्म सत्यापन पर यह दिखाएगा कि यह फ़ील्ड त्रुटि की आवश्यकता है।

null=True/False डेटाबेस से संबंधित है

blank=True/False प्रपत्र सत्यापन से संबंधित


11

यहाँ blank= Trueऔर के साथ क्षेत्र का एक उदाहरण हैnull=True

विवरण = model.TextField (रिक्त = सत्य, अशक्त = सत्य)

इस मामले में:: blank = Trueहमारे फॉर्म को बताता है कि विवरण फ़ील्ड को खाली छोड़ देना ठीक है

तथा

null = True: हमारे डेटाबेस को बताता है कि हमारे db क्षेत्र में एक शून्य मान रिकॉर्ड करना ठीक है और त्रुटि नहीं देना है।


7

यहाँ, का मुख्य अंतर है null=Trueऔर blank=True:

दोनों का डिफ़ॉल्ट मान nullऔर blankगलत है। ये दोनों मान फील्ड स्तर पर काम करते हैं, चाहे हम फील्ड रखना चाहते हों nullया नहीं blank

null=Trueफ़ील्ड का मान सेट करेगा NULL, कोई डेटा नहीं। यह मूल रूप से डेटाबेस कॉलम मान के लिए है।

date = models.DateTimeField(null=True)

blank=Trueनिर्धारित करता है कि फ़ील्ड रूपों में आवश्यक होगा या नहीं। इसमें व्यवस्थापक और आपके अपने कस्टम रूप शामिल हैं।

title = models.CharField(blank=True) // title can be kept blank. डेटाबेस में ("")संग्रहीत किया जाएगा। null=True blank=Trueइसका मतलब है कि क्षेत्र सभी परिस्थितियों में वैकल्पिक है।

epic = models.ForeignKey(null=True, blank=True)
// The exception is CharFields() and TextFields(), which in Django are never saved as NULL. Blank values a

6
null = True

इसका मतलब है कि भरे जाने वाले क्षेत्र के लिए डेटाबेस की कोई अड़चन नहीं है, इसलिए आपके पास भरे हुए विकल्प के लिए शून्य मान वाली कोई वस्तु हो सकती है।

blank = True

इसका मतलब है कि django रूपों में सत्यापन की कोई बाधा नहीं है। इसलिए जब आप modelFormइस मॉडल के लिए भरते हैं तो आप इस विकल्प के साथ फ़ील्ड को अधूरा छोड़ सकते हैं।


6

अशक्त और रिक्त का डिफ़ॉल्ट मान गलत है।

अशक्त: यह डेटाबेस से संबंधित है। परिभाषित करता है कि क्या दिया गया डेटाबेस कॉलम अशक्त मूल्यों को स्वीकार करेगा या नहीं।

रिक्त: यह सत्यापन-संबंधी है। इसका उपयोग प्रपत्र सत्यापन के दौरान किया जाएगा, जब कॉलिंग form.is_valid ()।

यह कहा जा रहा है, अशक्त = सत्य और रिक्त = गलत के साथ एक क्षेत्र होना पूरी तरह से ठीक है। डेटाबेस स्तर पर अर्थ फ़ील्ड NULL हो सकता है, लेकिन एप्लिकेशन स्तर में यह एक आवश्यक फ़ील्ड है।

अब, जहां अधिकांश डेवलपर्स इसे गलत पाते हैं: स्ट्रिंग-आधारित फ़ील्ड जैसे कि CharField और TextField के लिए null = True को परिभाषित करना। ऐसा करने से बचें। अन्यथा, आप "कोई डेटा नहीं" के लिए दो संभावित मानों को समाप्त कर देंगे, वह है: कोई नहीं और एक खाली स्ट्रिंग। "कोई डेटा नहीं" के लिए दो संभावित मान बेमानी हैं। Django सम्मेलन खाली स्ट्रिंग का उपयोग करना है, न कि NULL।


5

जब हम Django व्यवस्थापक में कुछ भी बचाते हैं तो दो चरण सत्यापन होता है, Django स्तर पर और डेटाबेस स्तर पर। हम एक नंबर फ़ील्ड में टेक्स्ट नहीं बचा सकते हैं।

डेटाबेस में डेटा प्रकार NULL है, यह कुछ भी नहीं है। जब Django डेटाबेस में कॉलम बनाता है तो यह निर्दिष्ट करता है कि वे खाली नहीं हो सकते। और अगर आप NULL को बचाने की कोशिश करेंगे तो आपको डेटाबेस एरर मिलेगा।

Django-Admin स्तर पर भी, डिफ़ॉल्ट रूप से सभी फ़ील्ड आवश्यक हैं, आप रिक्त फ़ील्ड को सहेज नहीं सकते हैं, Django आपको एक त्रुटि देगा।

इसलिए, यदि आप रिक्त क्षेत्र को सहेजना चाहते हैं, तो आपको इसे Django और डेटाबेस स्तर पर अनुमति देने की आवश्यकता है। blank = true - व्यवस्थापक पैनल में रिक्त क्षेत्र को रिक्त करने की अनुमति देगा null = True - डेटाबेस कॉलम में NULL को सहेजने की अनुमति देगा।


5

एक बिंदु ऐसा है जहां या तो null=Trueआवश्यक होगा CharFieldया TextFieldजब डेटाबेस में uniqueस्तंभ के लिए ध्वज सेट है।

दूसरे शब्दों में, यदि आप Django में एक अद्वितीय चार / TextField है, तो आपको इसका उपयोग करने की आवश्यकता होगी:

models.CharField(blank=True, null=True, unique=True)

गैर-अनूठे चारफ़िल्ड या टेक्स्टफ़िल्ड के लिए, आप बेहतर होगा कि null=Trueअन्यथा कुछ फ़ील्डों को NULL के रूप में सेट किया जाएगा जबकि अन्य को "" के रूप में सेट किया जाएगा, और आपको NULL के लिए फ़ील्ड मान की जाँच करनी होगी।


3

null डेटाबेस के लिए है और रिक्त फ़ील्ड सत्यापन के लिए है जिसे आप व्यक्ति के अंतिम नाम को प्राप्त करने के लिए टेक्स्टफील्ड जैसे उपयोगकर्ता इंटरफ़ेस पर दिखाना चाहते हैं। यदि lastname = model.charfield (रिक्त = सही) यह उपयोगकर्ता को अंतिम नाम दर्ज करने के लिए नहीं कहता है क्योंकि यह अभी वैकल्पिक क्षेत्र है। यदि lastname = model.charfield (null = true) तो इसका मतलब है कि यदि इस फ़ील्ड को उपयोगकर्ता से कोई मूल्य नहीं मिलता है तो यह डेटाबेस में एक रिक्त स्ट्रिंग "" के रूप में संग्रहीत करेगा।


1

अशक्त का अर्थ = सही और रिक्त = मॉडल में सत्य भी इस बात पर निर्भर करता है कि इन फ़ील्ड को फॉर्म क्लास में कैसे परिभाषित किया गया था।

मान लीजिए कि आपने निम्न वर्ग को परिभाषित किया है:

class Client (models.Model):
    name = models.CharField (max_length=100, blank=True)
    address = models.CharField (max_length=100, blank=False)

यदि फॉर्म क्लास को इस तरह परिभाषित किया गया है:

class ClientForm (ModelForm):
    class Meta:
        model = Client
        fields = ['name', 'address']
        widgets = {
            'name': forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
            'address': forms.TextInput (attrs = {'class': 'form-control form-control-sm'})
        }

फिर, 'नाम' फ़ील्ड अनिवार्य नहीं होगा (मॉडल में रिक्त = सत्य के कारण) और 'पता' फ़ील्ड अनिवार्य होगा (मॉडल में रिक्त = गलत होने के कारण)।

हालाँकि, अगर ClientForm वर्ग को इस तरह परिभाषित किया गया है:

class ClientForm (ModelForm):
    class Meta:
        model = Client
        fields = ['name', 'address']

    name = forms.CharField (
        widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
    )
    address = forms.CharField (
        widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
    )

फिर, दोनों क्षेत्र ('नाम' और 'पता') " अनिवार्य रूप से परिभाषित क्षेत्रों के रूप में छोड़ दिए गए हैं," ( https://docs.djangoproject.com/en/3.0/topics/forms/modelformform/ ) अनिवार्य होगा। , अर्थात फॉर्म फ़ील्ड की 'आवश्यक' विशेषता के लिए डिफ़ॉल्ट सही है और इसके लिए यह आवश्यक होगा कि फ़ील्ड 'नाम' और 'पता' भरा हो, भले ही, मॉडल में, फ़ील्ड को रिक्त = True पर सेट किया गया हो।


0

null - डिफ़ॉल्ट गलत है यदि True, Django डेटाबेस में रिक्त को null के रूप में संग्रहीत करेगा।

रिक्त - डिफ़ॉल्ट गलत है यदि यह सही है कि फ़ील्ड रिक्त होने की अनुमति है

अधिक, गोटो https://docs.djangoproject.com/en/3.0/topics/db/models/


0

नीचे दी गई यह तालिका मुख्य अंतर प्रदर्शित करती है:

+--------------------------------------------------------------------+
| Purpose                  | null=True        | blank = True         |
|--------------------------|------------------|----------------------|
| Field can be empty in DB | Do this          | Unaffected           |
|--------------------------|------------------|----------------------|
| ModelForm(required field)| Unaffected       | field not required   |
|--------------------------|------------------|----------------------|
| Form Validation          | Unaffected       | field not required   |
|--------------------------|------------------|----------------------|
| on_delete=SET_NULL       | Need this        | Unaffected           |
+--------------------------------------------------------------------+

0

बहुत सरल शब्दों में ,

रिक्त रिक्त से अलग है।

अशक्त है डेटाबेस से संबंधित विशुद्ध रूप से , जबकि खाली सत्यापन से संबंधित (के रूप में) की आवश्यकता है

यदि null=True, Django होगा store empty values as NULL in the database। यदि कोई फ़ील्ड है blank=True, तो प्रपत्र सत्यापन होगा allow entry of an empty value। यदि किसी फ़ील्ड में रिक्त = गलत है, तो फ़ील्ड की आवश्यकता होगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.