Django布尔查询集过滤器不起作用

Joh*_*les 14 python sqlite django django-models django-queryset

这让我在一小时的大部分时间里感到沮丧.

我有以下型号:

sold= models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

以及以下视图代码:

properties = Property.objects.filter(sold=False).order_by('-created_on');
Run Code Online (Sandbox Code Playgroud)

以及我的sqlite3数据库中的以下值:

 sqlite> select sold from clients_property;
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)

并且以下模板代码可以正常工作(如隐藏已售出的商品):

{% if not property.sold %}
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么查询集过滤器不起作用或为什么我做错了?我试过了:

sold="1"
sold=1
sold="false"
sold=False
sold="False"
Run Code Online (Sandbox Code Playgroud)

Kir*_*ril 20

这也发生在我身上.

在SQLite中你可以得到值为0的布尔值和值为False的布尔值

所以Django不能用于设置为False的那些

我在sqliteman中看到了这种差异

简单的更新修复了问题.

我认为这发生在我的开发环境中的模式升级和迁移期间,所以我并不太担心它.

  • 我刚才遇到了同样的问题,这就解决了这个问题.我使用South通过迁移添加数据库列,然后突然Django在过滤时不知道如何处理它.我将所有"假"更新为0,一切都很好. (7认同)

Iss*_*lly 14

从您发布的内容来看,一切都按照广告宣传的方式进行.如果你从shell中尝试这些东西,你应该得到以下结果.当然我正在制作一些,所以在你复制粘贴之前阅读.

>>> 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>,]
Run Code Online (Sandbox Code Playgroud)

Jack是对的,1在大多数SQL实现中应该评估为True.