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 个回答
2
我也遇到过同样的问题。我的解决办法是把那一列的类型从'bit'改成'tinyint'。
在我的情况中,问题是因为我手动在一个表里添加了一列。
23
我也遇到过这个问题。
结果发现,在SQLite中,布尔值可以是0,也可以是False。
所以Django对设置为False的布尔值不太兼容。
我在SQLiteMan中看到了这个不一致的地方。
简单的更新就解决了这个问题。
我觉得这个问题是在我开发环境中进行架构升级和迁移时出现的,所以我并不太担心。
17
根据你发布的内容,一切都正常运作。如果你在命令行里试试这些东西,你应该能得到以下结果。当然,我有些内容是自己编的,所以在直接复制粘贴之前,最好先看看。
>>> 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>,]
杰克说得对,在大多数SQL的实现中,1应该被认为是真(True)。