পার্থক্য নাল = সত্য, ফাঁকা = জ্যাঙ্গোতে সত্য


901

জাজানোতে যখন আমরা একটি ডাটাবেস ক্ষেত্র যুক্ত করি আমরা সাধারণত লিখি:

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ডাটাবেসে সংরক্ষণ করতে পারি না , যেমন প্রতিটি মডেলকে "প্রকাশিত" করতে হয়, তবে আমি অ্যাডমিনে খালি খালি রাখতে সক্ষম হতে চাই।
ষা

আমি মনে করি আপনি আগ্রহী হতে পারেন [খালি স্ট্রিংয়ের চেয়ে খালি, অবননযোগ্য চারফিল্ডকে নাল হিসাবে সংরক্ষণ করুন] ( কোড . djangoproject.com/ticket/4136 )। এটি সম্পর্কে অনেকগুলি আলোচনা রয়েছে এবং আপনি যে বাস্তব সমস্যার মুখোমুখি হতে পারেন (উদাহরণস্বরূপ, আপনি প্রতিটি ব্যবহারকারীর জন্য একটি ওপেনিড ইউআরএল যুক্ত করতে চান যা নাল হতে পারে এবং অনন্য হওয়া উচিত)।
রমউইন

উত্তর:


1081

null=Trueআপনার ডিবিতে কলামে সেট NULL(বনাম NOT NULL) যেমন জ্যাঙ্গো ক্ষেত্র ধরনের জন্য ফাঁকা মান DateTimeFieldবা ForeignKeyযেমন সংরক্ষণ করা হবে NULLডিবি হবে।

blankক্ষেত্রটি ফর্মগুলিতে প্রয়োজন হবে কিনা তা নির্ধারণ করে। এর মধ্যে অ্যাডমিন এবং আপনার কাস্টম ফর্মগুলি অন্তর্ভুক্ত রয়েছে। তাহলে blank=Trueক্ষেত্রের প্রয়োজন হবে না, অন্যদিকে যদি Falseক্ষেত্রটি ফাঁকা থাকে না।

দুটির কম্বো এত ঘন ঘন কারণ সাধারণত আপনি যদি কোনও ফর্মকে আপনার ফর্মের মধ্যে ফাঁকা রাখার অনুমতি প্রদান করতে চলেছেন তবে আপনাকে NULLসেই ক্ষেত্রের মানগুলি দেওয়ার জন্য আপনার ডাটাবেসও প্রয়োজন হবে । ব্যতিক্রম CharFieldগুলি এবং TextFieldগুলি, যা জ্যাঙ্গোতে কখনই সংরক্ষণ হয় নাNULL । ফাঁকা মান ( '') খালি স্ট্রিং হিসাবে ডিবিতে জমা হয় ।

কয়েকটি উদাহরণ:

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প্রকারগুলি কখনই NULLজ্যাঙ্গো দ্বারা সংরক্ষণ করা হয় না , তাই null=Trueঅপ্রয়োজনীয়। যাইহোক, আপনি Noneজোর করতে এই ক্ষেত্রগুলির একটিটিকে ম্যানুয়ালি সেট করতে পারেন হিসাবে সেট করুন NULL। আপনার যদি এমন পরিস্থিতি তৈরি হয় যেখানে এটি প্রয়োজনীয় হতে পারে তবে আপনার এখনও অন্তর্ভুক্ত করা উচিত null=True


8
IntegrityErrorজাজানো যখন ডাটাবেসে রেকর্ডটি সংরক্ষণের চেষ্টা করে তখন উত্থাপিত হয়। ক্ষেত্রটি ব্যবহারকারী দ্বারা পূরণ করার প্রয়োজন হয় না, এবং এটি সমস্যা কারণ ডেটাবেস পর্যায়ে এটি নাল নয়।
ক্রিস প্র্যাট

5
না, ক্রিস কেন ফাঁকা = সত্য থাকলে শূন্য থাকা = সত্য থাকা ডেটটাইমফিল্ডে সমস্যার কারণ হতে পারে তা নির্দেশ করার চেষ্টা করছেন।
বিনোদ কুরুপ

4
ওরাকল ব্যবহারকারীদের জন্য নোট: এটি সত্য নয় যে " CHARএবং TEXTএটি NULLজ্যাঙ্গোর দ্বারা সংরক্ষণ করা হয় না "। এটি বেশিরভাগ ব্যাক-এন্ডের ক্ষেত্রে সত্য, তবে ওরাকল একটি খালি স্ট্রিংটি NULL এ
চাপিয়ে দেবে, সুতরাং জাজানো

10
@ ক্রিসপ্রাট আপনার পোস্টে মাইনর সংশোধন করুন: আপনি যদি নাল = সত্য সেট করেন তবে চার্ফিল্ডস ডাটাবেজে ন্যূনেল হিসাবে সংরক্ষণ করতে পারে ( Noneপাইথনে অনুবাদ করা )। ডক্স এমনকি নাল = true সেটিং কারণ এটি "blanky" মান দু ধরণের পারবেন এড়াতে বলে। আমি জাজানো ১.৮ / মাইএসকিউএল ৫..6
এডওয়ার্ড ডি সুজা

3
কেউ কিছু সমন্বয় উল্লেখ করতে যাচ্ছে: blank=True, null=False, default="something"?
ব্রায়ান এইচ।

124

জঙ্গো 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)
)

মাইএসকিউএল 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
@ কার্লমিয়ার: আমি দেখতে চেয়েছিলাম যে এটি কীভাবে ডেটাবেজে মানচিত্র তৈরি করবে এবং ভাগ করে নেওয়া হবে যেহেতু এটি অন্যদের জন্য সময় সাশ্রয় করবে। থিওরি বনাম উদাহরণটি যখন মেমরির সাথে একীভূত হওয়ার এবং প্রতিশ্রুতিবদ্ধ হয় তখন একটি পার্থক্য তৈরি করে। আসলে, আমি যে ডেটাবেসটি ব্যবহার করছিলাম না তার জন্য ম্যাপিং যুক্ত করার উপায়টি ছাড়লাম। ডাউনভোটের জন্য ধন্যবাদ এই দরকারী খুঁজে পাওয়া লোকের সংখ্যা স্পষ্টভাবে আপনার সাথে একমত নয়।
ব্যবহারকারী

5
উপস্থাপিত ডেটা থেকে কিছু সংক্ষিপ্ত সিদ্ধান্ত টানলে এটি একটি দরকারী উত্তর হতে পারে তবে আমি মনে করি না যে কোনও কাঁচা ডেটা ডাম্প উপস্থাপন করা একটি দরকারী উত্তর। এই ক্ষেত্রে এটি আসলে একটি বিভ্রান্তিকর উত্তর, যেহেতু (আরো মন্তব্য ছাড়া) এটা যে বোঝা উভয় প্রভাব blankএবং null, ডাটাবেজ কলাম প্রতিফলিত হওয়া উচিত যখন আসলে blankশুধুমাত্র পাইথন হ্যান্ডলিং, না ডাটাবেসের কলাম প্রভাবিত করে। অন্যরা যদি এটিকে কার্যকর বলে মনে করেন তবে তারা উজ্জীবিত হতে পারে; যারা বিভ্রান্তিমূলক জবাব দ্বারা বিভ্রান্ত হয় তাদের পক্ষে এটি দরকারী বলে মনে করাও সম্ভব ।
কার্ল মায়ার

4
প্রায় 3 বছরের পুরানো স্বীকৃত উত্তরটি সমস্ত কিছু বিস্তারিতভাবে ব্যাখ্যা করে। এখানে একই তথ্যটি পুনরাবৃত্তি করার কোনও অর্থ নেই।
ব্যবহারকারী

48

যেমনটি জাঙ্গো মডেল ক্ষেত্রের রেফারেন্সে বলা হয়েছে: লিঙ্ক

ক্ষেত্রের বিকল্পগুলি

নিম্নলিখিত যুক্তিগুলি সমস্ত ক্ষেত্রের জন্য উপলব্ধ are সব alচ্ছিক।


null

Field.null

যদি True, জ্যাঙ্গো হিসাবে খালি মান সংরক্ষণ করবেNULL ডাটাবেসের । ডিফল্ট হয় False

nullস্ট্রিং-ভিত্তিক ক্ষেত্রগুলিতে ব্যবহার করা এড়িয়ে চলুন যেমন CharFieldএবং TextFieldখালি স্ট্রিং মান সর্বদা খালি স্ট্রিং হিসাবে সংরক্ষণ করা হবে, যেমন না NULL। যদি একটি স্ট্রিং-ভিত্তিক ক্ষেত্র থাকে null=True, তার অর্থ এটি "কোনও ডেটা নয়": NULLএবং খালি স্ট্রিংয়ের জন্য দুটি সম্ভাব্য মান রয়েছে । বেশিরভাগ ক্ষেত্রে, "কোনও তথ্য নেই" এর জন্য দুটি সম্ভাব্য মান থাকা অপ্রয়োজনীয়; জ্যাঙ্গো সম্মেলনটি খালি স্ট্রিংটি ব্যবহার করার জন্য, নয় NULL

উভয় স্ট্রিং-ভিত্তিক এবং স্ট্রিং-ভিত্তিক ক্ষেত্রের জন্য, আপনি blank=Trueযদি ফর্মগুলিতে খালি মানগুলির অনুমতি দিতে চান তবে আপনাকেও সেট করতে হবে , কারণ nullপ্যারামিটারটি কেবল ডাটাবেস স্টোরেজকে প্রভাবিত করে (দেখুন blank)।

বিঃদ্রঃ

ওরাকল ডাটাবেস ব্যাকএন্ড ব্যবহার করার সময়, এই গুণটি নির্বিশেষে খালি স্ট্রিং বোঝাতে NULL মান সংরক্ষণ করা হবে


blank

Field.blank

যদি True, ক্ষেত্রটি ফাঁকা করার অনুমতি দেওয়া হয়। ডিফল্ট হয় False

মনে রাখবেন যে এটির চেয়ে আলাদা nullnullখাঁটি ডাটাবেস-সম্পর্কিত, যেখানে blankবৈধতা সম্পর্কিত। যদি কোনও ক্ষেত্র থাকে blank=True, ফর্ম বৈধতা একটি খালি মান প্রবেশের অনুমতি দেবে। যদি একটি ক্ষেত্র থাকে blank=False, ক্ষেত্র প্রয়োজন হবে।


46

এটি বুঝতে গুরুত্বপূর্ণ যে জ্যাঙ্গো মডেল ফিল্ড সংজ্ঞা বিকল্পগুলি দুটি উদ্দেশ্যে পরিবাহিত করে (কমপক্ষে) দুটি উদ্দেশ্য: ডাটাবেস টেবিলগুলি সংজ্ঞায়িত করা এবং মডেল ফর্মগুলির ডিফল্ট ফর্ম্যাট এবং বৈধতা সংজ্ঞা দেওয়া। (আমি "ডিফল্ট" বলি কারণ মানগুলি সর্বদা কাস্টম ফর্ম সরবরাহ করে ওভাররাইড করা যায়)) কিছু বিকল্প ডাটাবেসকে প্রভাবিত করে, কিছু বিকল্প ফর্মগুলিকে প্রভাবিত করে এবং কিছুগুলি উভয়কেই প্রভাবিত করে।

যখন এটি আসে nullএবং blank, অন্যান্য উত্তরগুলি ইতিমধ্যে পরিষ্কার করে দিয়েছে যে পূর্ববর্তীটি ডাটাবেস সারণির সংজ্ঞা প্রভাবিত করে এবং উত্তরটি মডেল বৈধকরণকে প্রভাবিত করে। আমি মনে করি চারটি সম্ভাব্য কনফিগারেশনের জন্য ব্যবহারের কেস দেখে পার্থক্যটিকে আরও পরিষ্কার করা যেতে পারে:

  • null=False, blank=False: এটি ডিফল্ট কনফিগারেশন এবং এর অর্থ হল যে সমস্ত পরিস্থিতিতে মান প্রয়োজন।

  • null=True, blank=True: এর অর্থ ক্ষেত্রটি সকল পরিস্থিতিতে optionচ্ছিক। (যদিও নীচে উল্লিখিত হয়েছে, স্ট্রিং-ভিত্তিক ক্ষেত্রগুলি alচ্ছিক করে তোলার এটি প্রস্তাবিত উপায় নয় ))

  • null=False, blank=True: এর অর্থ হল যে ফর্মটির জন্য কোনও মানের প্রয়োজন নেই তবে ডাটাবেসটি করে। এর জন্য বেশ কয়েকটি ব্যবহারের কেস রয়েছে:

    • সর্বাধিক সাধারণ ব্যবহার stringচ্ছিক স্ট্রিং-ভিত্তিক ক্ষেত্রগুলির জন্য for ডকুমেন্টেশনে উল্লিখিত হিসাবে , জ্যাঙ্গো প্রতিমাটি হ'ল মানকে চিহ্নিত করতে খালি স্ট্রিংটি ব্যবহার করা উচিত। যদি NULLঅনুমতিও দেওয়া হয় তবে আপনি দু'টি পৃথক উপায়ে শেষ না করে কোনও গায়েব মান নির্দেশ করতে পারেন।

    • আর একটি সাধারণ পরিস্থিতি হ'ল আপনি অন্য ক্ষেত্রের মান (আপনার save()পদ্ধতিতে, বলুন) এর উপর ভিত্তি করে একটি ক্ষেত্র স্বয়ংক্রিয়ভাবে গণনা করতে চান । আপনি চান না যে ব্যবহারকারী কোনও ফর্মের মান সরবরাহ করুন (তাই blank=True), আপনি ডাটাবেসটি প্রয়োগ করতে চান যে একটি মান সর্বদা সরবরাহ করা হয় ( null=False)।

    • আরেকটি ব্যবহার হ'ল আপনি যখন ইঙ্গিত করতে চান যে একটি ManyToManyFieldalচ্ছিক। কারণ এই ক্ষেত্রটি একটি ডাটাবেস কলামের চেয়ে পৃথক সারণী হিসাবে প্রয়োগ করা nullঅর্থহীন । এর মানটি blankএখনও ফর্মগুলিকে প্রভাবিত করবে, যদিও কোনও সম্পর্ক নেই যখন বৈধতা কার্যকর হবে কিনা তা নিয়ন্ত্রণ করে।

  • null=True, blank=False: এর অর্থ হ'ল ফর্মটির জন্য একটি মান প্রয়োজন তবে ডাটাবেসটি লাগে না। এটি সবচেয়ে বেশি ব্যবহৃত কনফিগারেশন হতে পারে তবে এর জন্য কিছু ব্যবহারের কেস রয়েছে:

    • আপনার ব্যবসায়িক যুক্তি দ্বারা বাস্তবে এটি প্রয়োজনীয় না হলেও আপনার ব্যবহারকারীদের সর্বদা একটি মূল্য অন্তর্ভুক্ত করা প্রয়োজন এটি সম্পূর্ণ যুক্তিসঙ্গত। সর্বোপরি, ফর্মগুলি ডেটা যুক্ত এবং সম্পাদনার একমাত্র উপায়। আপনার কাছে এমন কোড থাকতে পারে যা ডেটা উত্পন্ন করছে যা একইরকম কঠোর বৈধতার প্রয়োজন নেই যা আপনি কোনও মানব সম্পাদকের প্রয়োজন।

    • আর একটি ব্যবহারের ক্ষেত্র যা আমি দেখেছি তা হ'ল যখন আপনার এমন একটি থাকে ForeignKeyযার জন্য আপনি ক্যাসকেড মোছার অনুমতি দিতে চান না । এটি হ'ল, সাধারণ ব্যবহারের ক্ষেত্রে সম্পর্কটি সর্বদা সেখানে থাকা উচিত ( blank=False) তবে এটি যে বিষয়টিকে নির্দেশ করে সেটি মুছে ফেলার ক্ষেত্রে, আপনি চান না যে এই বস্তুটিও মুছে ফেলা হবে। সেক্ষেত্রে আপনি একটি সাধারণ ধরণের নরম মোছা ব্যবহার করতে null=Trueএবং on_delete=models.SET_NULLপ্রয়োগ করতে পারেন ।


1
এটি একটি নিখুঁত উত্তর, সম্ভাব্য সমস্ত সংমিশ্রণগুলি খুব সংক্ষিপ্তভাবে ব্যাখ্যা করা হয়েছে!
রুশআই

1
গ্রহণযোগ্য উত্তর হওয়া উচিত।
টম ম্যাক

28

আজ অবধি আপনার উত্তর থাকতে পারে তবে নাল = ট্রু বা ফাঁকা = সত্য বা উভয়ই কোনও ক্ষেত্রে রাখবেন কিনা তা বিচার করা শক্ত judge আমি ব্যক্তিগতভাবে মনে করি এটি বিকাশকারীদের এতগুলি বিকল্প সরবরাহ করতে বেশ বেহুদা এবং বিভ্রান্তিকর। হ্যান্ডেলটি নালগুলি বা ফাঁকা স্থানগুলি তারা চাইলেও চলুক।

আমি এই টেবিলটি অনুসরণ করি , জ্যাঙ্গোর দুটি স্কুপ থেকে :এখানে চিত্র বর্ণনা লিখুন

প্রতিটি ক্ষেত্র প্রকারের জন্য কখন নাল বা ফাঁকা ব্যবহার করবেন তা সারণী প্রদর্শন করছে


26

কেবলমাত্র null=Trueডেটাবেসকে NULLমানগুলি গ্রহণ করা উচিত , অন্যদিকে blank=Trueফর্ম বৈধকরণের সংজ্ঞা দেওয়া হয় এই ক্ষেত্রটি ফাঁকা মান গ্রহণ করবে বা না তা (যদি blank=Trueএটি ক্ষেত্রের কোনও মান ছাড়াই ফর্ম গ্রহণ করে এবং blank=Falseফর্ম বৈধকরণে [ডিফল্ট মান] এটি দেখায় তবে এই ক্ষেত্রটি ত্রুটির প্রয়োজন required

null=True/False ডাটাবেস সম্পর্কিত

blank=True/False ফর্ম বৈধতা সম্পর্কিত


11

এখানে blank= Trueএবং এর সাথে ক্ষেত্রের উদাহরণ isnull=True

বিবরণ = মডেল। পাঠ্যফিল্ড (ফাঁকা = সত্য, নাল = সত্য)

এই ক্ষেত্রে:: blank = Trueআমাদের ফর্মকে বলে যে বর্ণনা ক্ষেত্রটি ফাঁকা রেখে দেওয়া ঠিক is

এবং

null = True: আমাদের ডাটাবেসকে বলে যে আমাদের ডিবি ক্ষেত্রে একটি নাল মান রেকর্ড করা এবং ত্রুটি না দেওয়া ঠিক আছে।


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এর অর্থ হ'ল ক্ষেত্রটি সমস্ত পরিস্থিতিতে optionচ্ছিক।

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

মানে জাঙ্গো ফর্মগুলিতে বৈধতার কোনও বাধা নেই। সুতরাং আপনি যখন modelFormএই মডেলের জন্য একটি পূরণ করেন আপনি এই বিকল্পটি পূরণ না করে ক্ষেত্রটি ছেড়ে যেতে পারেন।


6

নাল এবং ফাঁকা এর ডিফল্ট মানগুলি মিথ্যা।

নাল: এটি ডাটাবেস-সম্পর্কিত। প্রদত্ত ডাটাবেস কলামটি নাল মান গ্রহণ করবে কিনা তা নির্ধারণ করে।

ফাঁকা: এটি বৈধতা সম্পর্কিত। ফর্ম.আইস_অডিয়াল () কল করার সময় এটি ফর্মগুলির বৈধতার সময় ব্যবহার করা হবে।

যা বলা হচ্ছে, নাল = সত্য এবং ফাঁকা = মিথ্যা দিয়ে ক্ষেত্র রাখা পুরোপুরি ঠিক। ডাটাবেস স্তরের অর্থ ক্ষেত্রটি NULL হতে পারে তবে প্রয়োগের স্তরে এটি প্রয়োজনীয় ক্ষেত্র।

এখন, যেখানে বেশিরভাগ বিকাশকারীরা এটি ভুল পান: নাল = সংজ্ঞাটি স্ট্রিং-ভিত্তিক ক্ষেত্র যেমন চারফিল্ড এবং টেক্সটফিল্ডের জন্য। তা করা থেকে বিরত থাকুন। অন্যথায়, আপনার কাছে "কোনও তথ্য নেই" এর জন্য দুটি সম্ভাব্য মান রয়েছে, এটি: কোনওটি নয় এবং খালি স্ট্রিং। "কোনও তথ্য নেই" এর জন্য দুটি সম্ভাব্য মান থাকা অপ্রয়োজনীয়। জ্যাঙ্গো কনভেনশনটি শূন্য স্ট্রিংটি ব্যবহার করা হয়, নুল নয়।


5

যখন আমরা জ্যাঙ্গো অ্যাডমিনে কোনও কিছু সংরক্ষণ করি তখন দুটি ধাপের বৈধতা ঘটে যায়, জাঙ্গো স্তরে এবং ডাটাবেস স্তরে। আমরা একটি নম্বর ক্ষেত্রে পাঠ্য সংরক্ষণ করতে পারি না।

ডাটাবেসে ডেটা টাইপ NULL থাকে, এটি কিছুই না। জ্যাঞ্জো যখন ডাটাবেসে কলাম তৈরি করে তখন তা উল্লেখ করে যে সেগুলি খালি থাকতে পারে না। এবং আপনি যদি NULL সংরক্ষণ করার চেষ্টা করবেন আপনি ডাটাবেস ত্রুটি পাবেন।

এছাড়াও জ্যাঙ্গো-অ্যাডমিন স্তরে, সমস্ত ক্ষেত্র ডিফল্টরূপে প্রয়োজনীয়, আপনি ফাঁকা ক্ষেত্রটি সংরক্ষণ করতে পারবেন না, জাঙ্গো আপনাকে একটি ত্রুটি ছুঁড়ে দেবে।

সুতরাং, আপনি যদি ফাঁকা ক্ষেত্র সংরক্ষণ করতে চান তবে আপনাকে এটি জাঙ্গো এবং ডাটাবেস স্তরে অনুমতি দেওয়া দরকার। ফাঁকা = সত্য - অ্যাডমিন প্যানেলে খালি ক্ষেত্রের অনুমতি দেবে নাল = ট্রু - ডাটাবেস কলামে NULL সংরক্ষণের অনুমতি দেবে।


5

একটি পয়েন্ট আছে যেখানে null=Trueএমনকি প্রয়োজন হবে একটি CharFieldবা এমনকি TextFieldএবং এটি যখন ডাটাবেস থাকেunique কলামের জন্য পতাকা সেট থাকে set

অন্য কথায়, যদি আপনি জাজানোতে একটি অনন্য চর / টেক্সটফিল্ড করেন তবে আপনার এটি ব্যবহার করতে হবে:

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

অ-অনন্য চার্ফিল্ড বা টেক্সটফিল্ডের জন্য, আপনি null=Trueঅন্যথায় কিছু ক্ষেত্র NULL হিসাবে সেট হবে এবং অন্য "" হিসাবে নীল হিসাবে সেট হবে, এবং আপনাকে প্রতিবার NULL এর জন্য ক্ষেত্রের মানটি পরীক্ষা করতে হবে।


3

নাল ডাটাবেসের জন্য এবং ফাঁকা ক্ষেত্রের বৈধতার জন্য যা আপনি ব্যবহারকারীর ইন্টারফেসে যেমন টেক্সটফিল্ডের মতো ব্যক্তির শেষ নামটি দেখতে চান। পদবি যদি = মডেলস.ফারফিল্ড (ফাঁকা = সত্য) হয় তবে এটি ব্যবহারকারীদের শেষ নাম লিখতে বলবে না কারণ এটি এখন theচ্ছিক ক্ষেত্র। যদি লাস্টনাম = মডেলস.ফারফিল্ড (নাল = সত্য) থাকে তবে এর অর্থ হ'ল যদি এই ক্ষেত্রটি ব্যবহারকারীর কাছ থেকে কোনও মান না পায় তবে এটি একটি খালি স্ট্রিং হিসাবে ডাটাবেসে সংরক্ষণ করবে "।


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'})
        }

তারপরে, 'নাম' ক্ষেত্রটি বাধ্যতামূলক হবে না (মডেলের ফাঁকা = সত্যের কারণে) এবং 'ঠিকানা' ক্ষেত্রটি বাধ্যতামূলক হবে (মডেলের ফাঁকা = মিথ্যা কারণে)।

তবে, যদি ক্লায়েন্টফর্ম শ্রেণিটি এভাবে সংজ্ঞায়িত করা হয়:

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/modelforms/ ) , অর্থাত্ ফর্ম ক্ষেত্রের 'প্রয়োজনীয়' বৈশিষ্ট্যের জন্য ডিফল্টটি সত্য এবং এর জন্য ক্ষেত্রগুলির 'নাম' এবং 'ঠিকানা' পূরণ করা আবশ্যক, এমনকি যদি, মডেলটিতে ক্ষেত্রটি ফাঁকা = সত্য সেট করা থাকে।


0

নাল - ডিফল্ট মিথ্যা যদি সত্য হয়, জ্যাঞ্জো ডাটাবেসে নাল হিসাবে খালি সঞ্চয় করবে।

ফাঁকা - ডিফল্ট মিথ্যা যদি সত্য হয় যে ক্ষেত্রটি ফাঁকা হওয়ার অনুমতি দেওয়া হয়

আরও, যেতে 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, জাঙ্গো হবে store empty values as NULL in the database। যদি কোনও ক্ষেত্র থাকে তবে blank=Trueফর্মের বৈধতা থাকবে allow entry of an empty value। যদি কোনও ক্ষেত্রে ফাঁকা = মিথ্যা থাকে তবে ক্ষেত্রটি প্রয়োজন হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.