Фильтр Queryset Django Boolean не работает
Это расстраивало меня в течение большей части часа.
У меня есть следующая модель:
sold= models.BooleanField(default=False)
И следующий код вида:
properties = Property.objects.filter(sold=False).order_by('-created_on');
И следующие значения в моей базе данных sqlite3:
sqlite> select sold from clients_property;
1
1
1
1
1
И следующий код шаблона работает (как, скрывает проданные предметы):
{% if not property.sold %}
Кто-нибудь знает, почему фильтр набора запросов не работает или почему я делаю это неправильно? Я пробовал:
sold="1"
sold=1
sold="false"
sold=False
sold="False"
Ответы
Ответ 1
Из того, что вы опубликовали, все работает как рекламируемое. Если вы попробуете этот материал из оболочки, вы должны получить следующие результаты. Конечно, я делаю некоторые из них, поэтому читайте перед тем, как просто скопировать-вставить.
>>> from myapp.models import Property
>>> Property.objects.all()
[<Property: Property object>,<Property: Property object>,<Property: Property object>,<Property: Property object>,<Property: Property object>,]
>>> Property.objects.filter(sold=False)
[]
>>> Property.objects.filter(sold=True)
[<Property: Property object>,<Property: Property object>,<Property: Property object>,<Property: Property object>,<Property: Property object>,]
>>> Property.objects.create(sold=False, my='other', fields=1)
>>> Property.objects.filter(sold=False)
[<Property: Property object>,]
Джек прав, 1 должен оценивать значение True в большинстве реализаций SQL.
Ответ 2
Это случилось и со мной.
В SQLite вы можете иметь Boolean со значением 0 и Boolean со значением False
Итак, Django не работает с установками False
Я видел это несоответствие в sqliteman
Простое обновление устраняет проблему.
Я думаю, что это произошло во время обновления схемы и миграции в моей среде dev, поэтому я не слишком беспокоюсь об этом.
Ответ 3
У меня была та же проблема. Мое решение состояло в том, чтобы изменить тип столбца от "бит" до "tinyint".
Проблема в моем случае была вызвана добавленным вручную столбцом в таблице.