Логическое значение Истина/Ложь/Нет

Возможно, глупый или уже отвеченный вопрос здесь, извините за это.

Я знаю, что по определению логическое значение должно иметь 2 значения, но мне было интересно, как в Django рекомендуется хранить «третье» значение None, скажем, для необязательных логических полей.

Пока я использую CharField или ChoiceField с "да", "нет", "нет_данных", но я чувствую, что это не оптимально. Может быть, есть лучший способ использовать специальный 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

Вы можете использовать для это.

person neverwalkaloner    schedule 09.08.2018
comment
Я думал, что использование NullBooleanField означает просто сохранение False как null вместо 0, спасибо за быстрый ответ. - person Cyrlop; 09.08.2018