Фильтр Логических Запросов 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".
проблема в моем случае была вызвана добавленным вручную столбцом в таблице.