Логическая переменная шаблона django отображается как 0, но считается True.Зачем? - PullRequest
0 голосов
/ 03 августа 2011

У меня есть переменные шаблона, которые могут корректно отображаться с {{ myclass.myvariable }} как 1 или 0.

Но когда я использую их в операторе if {% if myclass.myvariable %}, они всегда считаются истинными, даже когда значение равно 0.

Переменные представляют собой 1-символьное поле char choices в моей модели, хранящееся как 0 или 1, и глава-4 системы шаблонов django утверждает, что:
'В Python пустой список ([]), tuple (()), словарь ({}), строка (' '), ноль (0) и специальный объект None являются ложными в логическом контексте. Все остальное - правда. '

Я не использовал BooleanField в модели, потому что у меня также есть значения выбора 2, 3, 4 ...

В чем здесь проблема?

Ответы [ 3 ]

6 голосов
/ 03 августа 2011

Потому что '0' (строка) не 0 (целое число).'0' - строка не нулевой длины, что означает, что она True в логическом контексте.Если вы храните целые числа, вы должны использовать IntegerField или PositiveIntegerField, а не CharField.

0 голосов
/ 03 августа 2011

Если вы получаете значения от CharField, тогда это '0', а не 0

>>> True if 0 else False
False
>>> True if '0' else False
True
0 голосов
/ 03 августа 2011

Они обрабатываются как строки ('0' строка и '1' строка, а не 0 целое число и 1 целое число).

Если вы перейдете к командной строке Python и вызовете bool(0) или bool(False), вы получите False, но если вы позвоните bool('0'), вы получите True.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...