Фильтр Логических Запросов Django Не Работает

это расстраивало меня большую часть часа.

у меня есть следующие модели:

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"

3 ответов


из того, что вы опубликовали, все работает так, как рекламируется. Если вы попробуете этот материал из оболочки, вы получите следующие результаты. Конечно, я кое-что придумываю, поэтому читайте, прежде чем просто копировать-вставить.

>>> 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>,]

Jack прав, 1 должен оценивать True в большинстве реализаций SQL.


Это случилось и со мной.

оказалось в SQLite вы можете иметь Boolean со значением 0 и Boolean со значением False

таким образом, Django не работает с теми, которые установлены в False

Я видел это несоответствие в sqliteman

простое обновление исправило проблему.

Я думаю, что это произошло во время обновления схемы и миграции в моей среде разработки, поэтому я не слишком беспокоюсь об этом.


У меня была та же проблема. Мое решение состояло в том, чтобы изменить тип столбца с " bit " на "tinyint".

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