Подтвердить что ты не робот

Фильтр 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"
4b9b3361

Ответ 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".

Проблема в моем случае была вызвана добавленным вручную столбцом в таблице.