python - null=সত্য, ফাঁকা=django মধ্যে সত্য




django-models (11)

যখন আমরা models.CharField(max_length=100, null=True, blank=True) তে একটি ডাটাবেস ক্ষেত্র যোগ করি তখন আমরা সাধারণত models.CharField(max_length=100, null=True, blank=True) লিখি। models.CharField(max_length=100, null=True, blank=True)ForeignKey , DecimalField ইত্যাদির সাথে একই কাজ করা হয়

  1. null=True শুধুমাত্র null=True
  2. blank=True শুধুমাত্র blank=True
  3. null=True , blank=True

বিভিন্ন ক্ষেত্রে ( CharField , ForeignKey , ManyToManyField ForeignKey , ManyToManyField ) ক্ষেত্র। 1/2/3 ব্যবহার করার সুবিধা / অসুবিধা কি কি?


Answers

আমরা Django প্রশাসক কিছু সংরক্ষণ যখন Django স্তর এবং ডাটাবেস স্তরের উপর, দুটি ধাপ যাচাইকরণ ঘটবে। আমরা একটি নম্বর ক্ষেত্র টেক্সট সংরক্ষণ করতে পারবেন না।

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

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

তাই, যদি আপনি ফাঁকা ক্ষেত্রটি সংরক্ষণ করতে চান তবে আপনাকে এটি Django এবং ডেটাবেস স্তরের অনুমতি দিতে হবে। ফাঁকা = সত্য - অ্যাডমিন প্যানেল খালি ক্ষেত্র খালি অনুমতি দেবে = সত্য - ডাটাবেস কলামে NULL সংরক্ষণ করার অনুমতি দেবে।


এখানে, null=True এবং blank=True :

null এবং blank উভয়ের ডিফল্ট মান মিথ্যা। এই উভয় মান মাঠ পর্যায়ে কাজ করে অর্থাৎ, আমরা একটি ক্ষেত্র blank বা 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

Django মডেল ফিল্ড রেফারেন্স বলেছেন: Link

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

নিম্নলিখিত আর্গুমেন্ট সব ক্ষেত্রে ধরনের পাওয়া যায়। সব ঐচ্ছিক।


null

Field.null

যদি True , Django খালি মান ডাটাবেসের মধ্যে NULL হিসাবে সংরক্ষণ করবে। ডিফল্ট False

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

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

বিঃদ্রঃ

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


blank

Field.blank

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

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


null = True

অর্থাত্ ক্ষেত্রটি পূরণের জন্য ডাটাবেসের কোনও বাধা নেই, তাই আপনার কাছে এই বিকল্পটি ভরাটের জন্য নিল মান সহ একটি বস্তু থাকতে পারে।

blank = True

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


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

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

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

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


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

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

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

  • null=True , blank=True : এই ক্ষেত্রটি সব পরিস্থিতিতে ঐচ্ছিক। (নীচে উল্লেখ্য, স্ট্রিং-ভিত্তিক ক্ষেত্রগুলি ঐচ্ছিক করার জন্য এটি প্রস্তাবিত উপায় নয় ।)

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

    • এই কনফিগারেশন সবচেয়ে সাধারণ ব্যবহার ঐচ্ছিক স্ট্রিং ভিত্তিক ক্ষেত্রের জন্য। ডকুমেন্টেশন হিসাবে উল্লিখিত , Django idiom একটি অনুপস্থিত মান নির্দেশ করে খালি স্ট্রিং ব্যবহার করা হয়। যদি NULL অনুমতি দেয় তবে আপনি একটি অনুপস্থিত মান নির্দেশ করার জন্য দুটি ভিন্ন উপায়ে শেষ হয়ে যাবেন।

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

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

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

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

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


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

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

দুইটি কম্বো প্রায়শই ঘন ঘন হয় কারণ সাধারণত আপনি যদি আপনার ফর্মে একটি ক্ষেত্রকে ফাঁকা রাখতে অনুমতি দিচ্ছেন তবে আপনাকে সেই ক্ষেত্রের জন্য NULL মানগুলি মঞ্জুর করার জন্য আপনার ডেটাবেসের প্রয়োজন হবে। ব্যতিক্রমটি CharField এবং TextField গুলি, যা Django তে 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 ব্যবহার করতে পারে 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 প্রকারগুলি Django দ্বারা NULL হিসাবে সংরক্ষিত হয় না, তাই null=True অপ্রয়োজনীয়। যাইহোক, আপনি নিজেও এই ক্ষেত্রগুলির মধ্যে একটি সেটিকে NULL হিসাবে সেট করতে বাধ্য করতে পারেন। যদি আপনার এমন একটি দৃশ্যকল্প থাকে যেখানে এটি প্রয়োজনীয় হতে পারে তবে আপনাকে এখনও null=True অন্তর্ভুক্ত করা উচিত।


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


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

আমি এই টেবিলের অনুসরণ করি:


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

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

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


এখানে একটি সংস্করণ যা প্রতি সেকেন্ডে নতুন থ্রেড তৈরি করে না:

from threading import Event, Thread

def call_repeatedly(interval, func, *args):
    stopped = Event()
    def loop():
        while not stopped.wait(interval): # the first call is in `interval` secs
            func(*args)
    Thread(target=loop).start()    
    return stopped.set

ঘটনা পুনরাবৃত্তি বন্ধ করার জন্য ব্যবহৃত হয়:

cancel_future_calls = call_repeatedly(5, print, "Hello, World")
# do something else here...
cancel_future_calls() # stop future calls

একটি setInterval পাইথন বর্তমান বাস্তবায়ন উন্নত দেখুন





python django django-models