这让我在一小时的大部分时间里感到沮丧。
我有以下型号:
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"
答案 0 :(得分:19)
这也发生在我身上。
在SQLite中你可以得到值为0的布尔值和值为False
的布尔值所以当Django设置为False
时,它不起作用我在sqliteman中看到了这种差异
简单更新修复了问题。
我认为这发生在我的开发环境中的架构升级和迁移期间,所以我并不太担心它。
答案 1 :(得分:13)
根据您发布的内容,一切都按照广告宣传。如果你从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>,]
Jack是对的,1在大多数SQL实现中应该评估为True。
答案 2 :(得分:1)
我遇到了同样的问题。我的解决方案是将列的类型从“位”更改为“tinyint”。
我的案例中的问题是由表中手动添加的列引起的。