අවකලනය null = ඇත්ත, හිස් = සත්‍යය ජැන්ගෝ වල


945

අපි ජැන්ගෝ හි දත්ත සමුදා ක්ෂේත්‍රයක් එකතු කළ විට අපි සාමාන්‍යයෙන් ලියන්නේ:

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


ඔව්, මා සතුව මෙම භාවිත කේතයද ForeignKeyඇත blank=True, නමුත් නොමැතිව null=True. ආකෘතිය සුරකින විට, එයින් ප්‍රකාශිත ප්‍රවේශයක් නිර්මාණය කිරීමෙන් එය ස්වයංක්‍රීයව "ප්‍රකාශයට පත් කිරීමට" මට අවශ්‍යය. nullසෑම ආකෘතියක්ම "ප්‍රකාශයට පත් කළ යුතු" බැවින් මට දත්ත සමුදායට සුරැකිය නොහැක , නමුත් මට අවශ්‍ය වන්නේ ක්ෂේත්‍රය හිස්ව පරිපාලක තුළ තැබීමට හැකිවීමයි.
සර්ජි ඕර්ෂාන්ස්කි

මම හිතන්නේ ඔබ [හිස්, හිස් කළ හැකි චාර්ෆීල්ඩ් හිස් නූලක් ලෙස නොව ශුන්‍ය ලෙස සුරකින්න] ( code.djangoproject.com/ticket/4136 ) ගැන උනන්දු වනු ඇත. මේ පිළිබඳව බොහෝ සාකච්ඡා ඇති අතර ඔබට මුහුණ දීමට සිදුවිය හැකි ඉතා ප්‍රායෝගික ගැටළුවක් (උදා: ඔබට සෑම පරිශීලකයෙකුටම විවෘත url එකක් එක් කිරීමට අවශ්‍ය වන අතර එය ශුන්‍ය විය හැකි අතර අද්විතීය විය යුතුය).
රම්වින්

Answers:


1138

null=Trueඔබගේ ඩීබී හි තීරුවේ කට්ටල NULL(එදිරිව NOT NULL). DB හි මෙන් DateTimeFieldහෝ ForeignKeyගබඩා කර NULLඇති ජැන්ගෝ ක්ෂේත්‍ර වර්ග සඳහා හිස් අගයන් .

blankක්ෂේත්‍රය පෝරම වලින් අවශ්‍ය වේද යන්න තීරණය කරයි. මෙයට පරිපාලක සහ ඔබගේ අභිරුචි ආකෘති ඇතුළත් වේ. එසේ blank=Trueනම් ක්ෂේත්‍රය අවශ්‍ය නොවනු ඇත, නමුත් එය Falseක්ෂේත්‍රය නම් හිස් විය නොහැක.

මේ දෙකේ සංයෝජනය නිතර නිතර සිදුවන නිසා සාමාන්‍යයෙන් ඔබ ඔබේ ක්ෂේත්‍රයේ ක්ෂේත්‍රයක් හිස් වීමට ඉඩ දෙන්නේ NULLනම්, එම ක්ෂේත්‍රය සඳහා අගයන් ලබා දීමට ඔබේ දත්ත ගබඩාවද ඔබට අවශ්‍ය වනු ඇත . ව්යතිරේකය යනු CharFields සහ TextFields වන අතර එය ජැන්ගෝ හි කිසි විටෙකත් සුරකිනු නොලැබේ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 වෙත හිස් නූලක් බල කරනු ඇත, එබැවින් ජැන්ගෝ ඔරකල් පසුබිම ඉහත ප්‍රකාශයට ව්‍යතිරේකයකි ජැන්ගෝ ඩොක්ස්
stv

12
PostCrisPratt ඔබගේ තනතුරට සුළු නිවැරදි කිරීමක්: ඔබ null = True ලෙස සකසන්නේ නම් CharFields දත්ත ගබඩාවේ NULL ලෙස ( පයිතන්ට පරිවර්තනය කිරීම ) සුරැකිය හැකNone . මෙම ලේඛන පවා, එය "blanky 'වටිනාකම් විවිධ වර්ග දෙකක් ඉඩ නිසා ශූන්ය = සැබෑ සැකසීම වළක්වා ගැනීමට පවසති. මම මේ හැසිරීම ජැන්ගෝ 1.8 / MySQL 5.6
එඩ්වඩ් ඩිසූසා

3
: කිසිවෙක් සංයෝජන සඳහන් කිරීමට යන්නේ blank=True, null=False, default="something"?
බ්‍රයන් එච්.

129

ජැන්ගෝ 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
)

46
වෙනත් වචන වලින් කිවහොත්, blankදත්ත සමුදායට කිසිදු බලපෑමක් නොකරන nullඅතර දත්ත සමුදා තීරුව මඟින් NULLඅගයන්ට ඉඩ දෙන්නේද යන්න පාලනය කරයි . මෙම පිළිතුර එය පැවසීමේ දීර් way ක්‍රමයක් වන අතර ඒ පිළිබඳ ප්‍රයෝජනවත් තොරතුරු සපයන්නේ නැත blank.
කාල් මේයර්

19
Ar කාල්මේයර්: එය දත්ත සමුදායට සිතියම් ගත කරන්නේ කෙසේදැයි බැලීමට මට අවශ්‍ය වූ අතර එය බෙදාහදා ගත්තේ අන් අයටත් එසේ කිරීමට කාලය ඉතිරි වන බැවිනි. න්‍යාය එදිරිව උදාහරණය මතකය උකහා ගැනීමේදී හා කැපවීමේදී වෙනසක් ඇති කරයි. ඇත්ත වශයෙන්ම, මම භාවිතා නොකරන දත්ත සමුදායක් සඳහා සිතියම් එකතු කිරීමට මම පිටත්ව ගියෙමි. පහත වැටීමට ස්තූතියි. මෙය ප්‍රයෝජනවත් යැයි සිතූ පුද්ගලයින් සංඛ්‍යාව පැහැදිලිවම ඔබ සමඟ එකඟ නොවේ.
පරිශීලක

5
ඔබ ඉදිරිපත් කළ දත්ත වලින් සාරාංශ නිගමනවලට එළඹුණහොත් එය ප්‍රයෝජනවත් පිළිතුරක් විය හැකිය, නමුත් අමු දත්ත ඩම්ප් එකක් ඉදිරිපත් කිරීම ප්‍රයෝජනවත් පිළිතුරක් යැයි මම නොසිතමි. මෙම අවස්ථාවේ දී එය දෙකම බවට ගම්ය (වැඩිදුර අදහස් තොරව) දා පටන් මේ දක්වා, නොමග යවන සුළු පිළිතුර සත්ය වන blankඅතර nullඇත්ත විට, දත්ත සමුදායේ තීරු පිළිබිඹු විය යුත්තේ blankනැත Python පමණක් කටයුතු කිරීම, දත්ත ගබඩා තීරු බලපායි. අනෙක් අයට එය ප්‍රයෝජනවත් යැයි හැඟේ නම් ඒවා ඉහළ නැංවීමට නිදහස ඇත; නොමඟ යවන පිළිතුරකින් නොමඟ යවන පුද්ගලයින්ට එය ප්‍රයෝජනවත් යැයි සිතීමට ද හැකිය.
කාල් මේයර්

4
පිළිගත් පිළිතුර අවුරුදු 3 කට ආසන්න වන අතර සෑම දෙයක්ම විස්තරාත්මකව විස්තර කරයි. එකම තොරතුරු මෙහි පුනරාවර්තනය කිරීමේ තේරුමක් නැත.
පරිශීලක

56

ජැන්ගෝ ආකෘති ක්ෂේත්‍ර අර්ථ දැක්වීමේ විකල්පයන් අරමුණු දෙකක් (අවම වශයෙන්) ඉටු කරන බව වටහා ගැනීම ඉතා වැදගත් ය: දත්ත සමුදා වගු නිර්වචනය කිරීම සහ පෙරනිමි ආකෘතිය නිර්වචනය කිරීම සහ ආකෘති ආකෘති වලංගු කිරීම. .

එය පැමිණි විට 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=Falsenull=Trueon_delete=models.SET_NULL


2
මෙය පරිපූර්ණ පිළිතුරකි, හැකි සියලුම සංයෝජන ඉතා සංක්ෂිප්තව පැහැදිලි කර ඇත!
රුසි

49

ජැන්ගෝ ආදර්ශ ක්ෂේත්‍ර ක්ෂේත්‍රයේ සඳහන් පරිදි: සබැඳිය

ක්ෂේත්‍ර විකල්ප

සියලුම ක්ෂේත්‍ර වර්ග සඳහා පහත දැක්වෙන තර්ක ලබා ගත හැකිය. සියල්ල අත්‍යවශ්‍ය නොවේ.


null

Field.null

එසේ නම් True, ජැන්ගෝ NULLදත්ත සමුදායේ මෙන් හිස් අගයන් ගබඩා කරයි. පෙරනිමිය False.

භාවිතා කිරීමෙන් වැළකෙන nullවැනි සංගීත මත පදනම් ක්ෂේත්රවල CharFieldසහ TextFieldහිස් ඈඳීම හැම විටම ලෙස, හිස් නූල් ලෙස ගබඩා වනු ඇත නිසා NULL. නූල් මත පදනම් වූ ක්ෂේත්‍රයක් තිබේ නම් null=True, එයින් අදහස් කරන්නේ එයට “දත්ත නැත” සඳහා විය හැකි අගයන් දෙකක් ඇති බවයි: NULLසහ හිස් නූලයි. බොහෝ අවස්ථාවන්හීදී, "දත්ත නොමැත" සඳහා හැකි අගයන් දෙකක් තිබීම අතිරික්තය; ජැන්ගෝ සම්මුතිය යනු හිස් නූල භාවිතා කිරීමයි NULL.

පරාමිතිය දත්ත සමුදා ගබඩාවට පමණක් බලපාන blank=Trueබැවින්, නූල් මත පදනම් වූ සහ නූල් මත පදනම් නොවන ක්ෂේත්‍ර සඳහා, ආකෘතිවල හිස් අගයන් අවසර දීමට ඔබට අවශ්‍ය නම් ඔබ සැකසිය යුතුය .nullblank

සටහන

ඔරකල් දත්ත සමුදා පසුබිම භාවිතා කරන විට, මෙම ගුණාංගය නොසලකා හිස් නූල දැක්වීමට NULL අගය ගබඩා වේ.


blank

Field.blank

නම් True, ක්ෂේත්‍රය හිස් වීමට අවසර ඇත. පෙරනිමිය False.

මෙය වඩා වෙනස් බව සලකන්න null. nullතනිකරම දත්ත සමුදායට සම්බන්ධ වන අතර blankවලංගුකරණය සම්බන්ධ වේ. ක්ෂේත්‍රයක් තිබේ නම් blank=True, ආකෘති වලංගු කිරීම හිස් අගයක් ඇතුළත් කිරීමට ඉඩ දෙයි. ක්ෂේත්‍රයක් තිබේ නම් blank=False, ක්ෂේත්‍රය අවශ්‍ය වේ.


33

කෙසේ වෙතත් ඔබට ඔබේ පිළිතුර තිබිය හැකි නමුත් අද දක්වා ශුන්‍ය = සත්‍ය හෝ හිස් = සත්‍ය හෝ දෙකම ක්ෂේත්‍රයකට දැමිය යුතුද යන්න විනිශ්චය කිරීම අපහසුය. මම පුද්ගලිකව සිතන්නේ සංවර්ධකයින්ට බොහෝ විකල්ප ලබා දීම නිෂ් less ල සහ ව්‍යාකූල බවයි. ඔවුන්ට අවශ්‍ය පරිදි ශුන්‍ය හෝ හිස් තැන් හැසිරවීමට ඉඩ දෙන්න.

මම මෙම වගුව අනුගමනය කරන්නේ ජැන්ගෝහි හැඳි දෙකකින් :රූප විස්තරය මෙහි ඇතුළත් කරන්න

එක් එක් ක්ෂේත්‍ර වර්ගය සඳහා ශුන්‍ය හෝ හිස් භාවිතා කළ යුතු ආකාරය පෙන්වන වගුව


27

null=Trueදත්ත සමුදාය NULLසාරධර්ම පිළිගත යුතු බව සරලව නිර්වචනය කරයි , අනෙක් අතට blank=Trueපෝරමය වලංගු කිරීම අර්ථ දක්වයි මෙම ක්ෂේත්‍රය හිස් අගයන් පිළිගත යුතුද නැද්ද යන්න ( blank=Trueඑය එම ක්ෂේත්‍රයේ අගයක් නොමැතිව පෝරමයක් පිළිගන්නේ නම් සහ blank=Falseආකෘති වලංගු කිරීමේදී [පෙරනිමි අගය] එය පෙන්වනු ඇත මෙම ක්ෂේත්‍රය අවශ්‍ය දෝෂයකි.

null=True/False දත්ත සමුදායට අදාළයි

blank=True/False ආකෘති වලංගුකරණයට අදාළ වේ


13

blank= Trueසහ සමඟ ක්ෂේත්‍රය පිළිබඳ උදාහරණයක් මෙන්නnull=True

description = models.TextField (හිස් = සත්‍ය, ශූන්‍ය = සත්‍ය)

මෙම අවස්ථාවේදී blank = True:: විස්තර ක්ෂේත්‍රය හිස්ව තැබීම සුදුසු බව අපගේ පෝරමයට කියයි

සහ

null = True: අපගේ දත්ත ගබඩාවට පවසන්නේ අපගේ ඩීබී ක්ෂේත්‍රය තුළ ශුන්‍ය අගයක් සටහන් කිරීම සුදුසු බවත් දෝෂයක් නොදක්වන බවත්ය.


8
null = True

ක්ෂේත්‍රය පිරවීම සඳහා දත්ත සමුදායට බාධාවක් නොමැති බැවින් මෙම විකල්පය ඇති පිරවුම සඳහා ඔබට ශුන්‍ය වටිනාකමක් ඇති වස්තුවක් තිබිය හැකිය.

blank = True

ජැන්ගෝ ආකෘති වල වලංගුභාවයට බාධාවක් නැත. එබැවින් ඔබ modelFormමෙම ආකෘතිය සඳහා පුරවන විට ඔබට මෙම විකල්පය පුරවා ගත නොහැක.


8

මෙන්න, 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

7

ශුන්‍ය හා හිස් වල පෙරනිමි අගයන් අසත්‍යය.

ශූන්‍යය: එය දත්ත සමුදායට සම්බන්ධයි. දී ඇති දත්ත සමුදා තීරුව ශුන්‍ය අගයන් පිළිගන්නේද නැද්ද යන්න නිර්වචනය කරයි.

හිස්: එය වලංගු කිරීම හා සම්බන්ධයි. Form.is_valid () අමතන විට එය ආකෘති වලංගුකරණයේදී භාවිතා වේ.

එසේ පැවසුවහොත්, ශුන්‍ය = සත්‍ය සහ හිස් = අසත්‍යය සහිත ක්ෂේත්‍රයක් තිබීම හොඳය. දත්ත සමුදා මට්ටමේ අර්ථය ක්ෂේත්‍රය NULL විය හැකි නමුත් යෙදුම් මට්ටමින් එය අවශ්‍ය ක්ෂේත්‍රයකි.

දැන්, බොහෝ සංවර්ධකයින් එය වැරදියට වටහාගෙන ඇති තැන: නිර්වචනය කිරීම = චාර්ෆීල්ඩ් සහ ටෙක්ස්ට්ෆීල්ඩ් වැනි නූල් මත පදනම් වූ ක්ෂේත්‍ර සඳහා සත්‍යය. එසේ කිරීමෙන් වළකින්න. එසේ නොමැතිනම්, ඔබට “දත්ත නැත” සඳහා විය හැකි අගයන් දෙකක් තිබේ, එනම්: කිසිවක් නැත සහ හිස් නූලකි. “දත්ත නැත” සඳහා හැකි අගයන් දෙකක් තිබීම අතිරික්තය. ජැන්ගෝ සම්මුතිය යනු හිස් නූල් භාවිතා කිරීම මිස NULL නොවේ.


7

ඔබ සකසන්නේ නම් null=True, එය ඔබගේ දත්ත සමුදා තීරුවේ අගය ලෙස සැකසීමට ඉඩ දෙයි NULL. ඔබ පමණක් blank=Trueසකසන්නේ නම් , ජැන්ගෝ විසින් තීරුවේ පෙරනිමි නව අගය සමාන වේ "".

null=TrueA හි CharFieldහෝ අවශ්‍ය වූ එක් කරුණක් තිබේ. TextFieldදත්ත ගබඩාවේ uniqueතීරුව සඳහා ධජය සකසා ඇත්තේ එවිටය. මෙම අවස්ථාවේදී ඔබට මෙය භාවිතා කිරීමට අවශ්‍ය වනු ඇත:

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

Preferrably එම මඟ null=Trueසඳහා -සුවිශේෂී නොවන CharField හෝ TextField. එසේ නොමැතිනම් සමහර ක්ෂේත්‍ර NULLඅනෙක් ඒවා මෙන් සකසනු ඇති අතර ""ඔබට NULLසෑම විටම ක්ෂේත්‍ර වටිනාකම පරීක්ෂා කිරීමට සිදුවේ .


6

අපි ජැන්ගෝ පරිපාලක තුළ කිසිවක් සුරකින විට පියවර දෙකක් වලංගු කිරීම සිදු වේ, ජැන්ගෝ මට්ටමින් සහ දත්ත සමුදා මට්ටමින්. අපට සංඛ්‍යා ක්ෂේත්‍රයක පෙළ සුරැකිය නොහැක.

දත්ත සමුදායේ දත්ත වර්ගය NULL ඇත, එය කිසිවක් නැත. ජැන්ගෝ දත්ත සමුදායේ තීරු නිර්මාණය කරන විට එය හිස් විය නොහැකි බව නියම කරයි. ඔබ NULL සුරැකීමට උත්සාහ කළහොත් ඔබට දත්ත සමුදායේ දෝෂයක් ලැබෙනු ඇත.

ජැන්ගෝ-පරිපාලක මට්ටමින්, සියලු ක්ෂේත්‍ර පෙරනිමියෙන් අවශ්‍ය වේ, ඔබට හිස් ක්ෂේත්‍රය සුරැකිය නොහැක, ජැන්ගෝ ඔබට දෝෂයක් ඇති කරයි.

එබැවින්, ඔබට හිස් ක්ෂේත්‍රය සුරැකීමට අවශ්‍ය නම්, එය ජැන්ගෝ සහ දත්ත සමුදා මට්ටමින් ඉඩ දිය යුතුය. blank = සත්‍ය - පරිපාලක පැනලයේ හිස් ක්ෂේත්‍රයක් සඳහා ඉඩ දෙනු ඇත null = සත්‍ය - දත්ත සමුදා තීරුවට NULL සුරැකීමට ඉඩ දෙයි.


4

ශුන්‍ය දත්ත සමුදාය සඳහා වන අතර හිස් වන්නේ ක්ෂේත්‍ර වලංගු කිරීම සඳහා වන අතර පුද්ගලයාගේ අවසාන නම ලබා ගැනීම සඳහා පෙළ ක්ෂේත්‍රය වැනි පරිශීලක අතුරුමුහුණතෙහි පෙන්වීමට ඔබට අවශ්‍යය. නම් lastname = models.charfield (හිස් = සැබෑ) මේ දැන් විකල්ප ක්ෂේත්රයකි ලෙස අවසාන නම ඇතුළත් කිරීමට පරිශීලක ඉල්ලා didnot. නම් lastname = models.charfield (ශූන්ය = සැබෑ) එය මෙම ක්ෂේත්රය පරිශීලක ඕනෑම අගයක් ලබා doesnot නම් එය හිස් අගයක් "" ලෙස දත්ත ගබඩා වනු ඇති බව ය.


1

පහත වගුවේ ප්‍රධාන වෙනස්කම් පෙන්නුම් කරයි:

+--------------------------------------------------------------------+
| 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           |
+--------------------------------------------------------------------+

1

Null = සත්‍ය සහ හිස් = ආකෘතියේ සත්‍ය යන අර්ථය ද මෙම ක්ෂේත්‍ර ආකෘති පන්තියේ අර්ථ දක්වා ඇති ආකාරය මත රඳා පවතී.

ඔබ පහත පන්තිය නිර්වචනය කර ඇතැයි සිතමු:

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/modelforms/ ) , එනම් පෝරම ක්ෂේත්‍රයේ 'අවශ්‍ය' ගුණාංගයේ පෙරනිමිය සත්‍ය වන අතර මේ සඳහා 'නම' සහ 'ලිපිනය' යන ක්ෂේත්‍ර පුරවා තිබිය යුතුය, ආකෘතියේ දී ක්ෂේත්‍රය හිස් = සත්‍ය ලෙස සකසා ඇතත්.


1

ඔබ තබන විට, null=trueඑය සකස් කරනු ඇත nullක්ෂේත්රයේ පුරවා නොමැති නම්, ඔබගේ දත්ත සමුදාය. ඔබ blank='trueඑය සකසන්නේ නම් එය ක්ෂේත්‍රයට කිසිදු අගයක් සකසන්නේ නැත.


0

null - පෙරනිමිය වැරදියි නම් සත්‍ය නම්, ජැන්ගෝ දත්ත ගබඩාවේ හිස් ලෙස ගබඩා කරයි.

හිස් - පෙරනිමිය වැරදියි නම් සත්‍ය නම් එම ක්ෂේත්‍රය හිස් වීමට ඉඩ දෙනු ලැබේ

තවත්, ගොටෝ https://docs.djangoproject.com/en/3.0/topics/db/models/


0

ඉතා සරල වචන වලින් ,

හිස් ශුන්‍යයට වඩා වෙනස් ය.

ශූන්ය වේ තනිකරම දත්ත හා සම්බන්ධ බැවින්ද, හිස් වලංගු සම්බන්ධ (ආකෘති පත්රය තුළ අවශ්ය) වේ .

එසේ නම් null=True, ජැන්ගෝ එසේ කරනු ඇත store empty values as NULL in the database. ක්ෂේත්‍රයක් තිබේ නම් blank=True, ආකෘති වලංගු කිරීම allow entry of an empty value. ක්ෂේත්‍රයක් හිස් = අසත්‍ය නම්, ක්ෂේත්‍රය අවශ්‍ය වේ.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.