Фильтр Django Boolean Queryset не работает - PullRequest
14 голосов
/ 04 августа 2011

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

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

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 ]

19 голосов
/ 25 сентября 2011

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

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

То есть Django не работает с установленными на False

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

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

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

13 голосов
/ 04 августа 2011

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

>>> 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.

1 голос
/ 06 сентября 2013

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

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

...