Булева вярно/невярно/няма

Вероятно глупав или вече отговорен въпрос тук, съжалявам за това.

Знам, че по дефиниция булевата стойност трябва да има 2 стойности, но се чудех каква е добрата практика в Django да се съхранява "трета" None стойност, да кажем, за незадължителни булеви полета.

Досега използвам CharField или ChoiceField с "yes", "no", "no_data", но чувствам, че не е оптимално. Има ли по-добър начин може би с помощта на специално BooleanField, което може да съхранява true/false/null или нещо подобно?


person Cyrlop    schedule 09.08.2018    source източник


Отговори (2)


Django има NullBooleanField това е подклас на BooleanField, но където и null=True, и blank=True важат.

В django-2.1, < в href="https://docs.djangoproject.com/en/2.1/ref/models/fields/#booleanfield" rel="nofollow noreferrer">документация се споменава, че null=True е разрешено за BooleanField и че NullBooleanField вероятно ще бъде отхвърлен:

В по-старите версии това поле не позволява null=True, така че трябва да използвате NullBooleanField вместо това. Използването на последното вече не се препоръчва, тъй като е вероятно да бъде отхвърлено в бъдеща версия на Django.

В по-ранните версии на Django беше невъзможно да се напише BooleanField(null=True), но това поведение се промени.

Независимо какво ще се използва, идеята е базата данни да съхранява три възможни стойности: TRUE (преобразуване на True), FALSE (преобразуване на False) и NULL (преобразуване на None).

Обърнете внимание, че точно като CharFields, можете да настроите choices, за да позволите на стойностите да се картографират на по-„чувствителни“ дисплеи.

person Willem Van Onsem    schedule 09.08.2018

Можете да използвате NullBooleanField за това.

person neverwalkaloner    schedule 09.08.2018
comment
Мислех, че използването на NullBooleanField просто съхранява False като null вместо 0, благодаря за бързия отговор. - person Cyrlop; 09.08.2018