【问题标题】:Django Boolean Queryset Filter Not WorkingDjango 布尔查询集过滤器不起作用
【发布时间】:2011-10-19 11:28:27
【问题描述】:

这让我沮丧了一个小时。

我有以下型号:

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"

【问题讨论】:

  • 您是如何将数据插入数据库的? 1 的值通常计算为 True。所以在我看来,您数据库中的数据已损坏。
  • sold=False 是正确的过滤器,看起来您的数据库中没有任何带有 sold=False 的属性。
  • 我用 python 插入了它,变量是 sold=False
  • 另外,我通过 SQLite3 shell 手动将整数 0 和 1 更新为整数 0 和 1,并将视图中的过滤器语句更改为 sold='1' 和 sold=1 ,但这些都没有改变结果。
  • 叹息。好的。这将成为有史以来最愚蠢的 Stackoverflow 问题之一,但使用 Textmate,我正在编辑另一个视图,而不是通过 web 应用程序查看的视图。一切都很完美,我真的很抱歉浪费了大家的时间。

标签: python django django-models sqlite django-queryset


【解决方案1】:

根据您发布的内容,一切都按照宣传的方式进行。如果你从 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 是对的,在大多数 SQL 实现中,1 应该评估为 True。

【讨论】:

    【解决方案2】:

    这也发生在我身上。

    在 SQLite 中,您可以使用值为 0 的布尔值和值为 False 的布尔值。

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

    我在 SQLiteMan 中看到了这种差异。

    简单的更新解决了问题。

    我认为这发生在我的开发环境中的架构升级和迁移期间,所以我不太担心。

    【讨论】:

    • 我刚刚遇到了同样的问题,这解决了它。我用South通过迁移添加了一个数据库列,然后突然django过滤的时候不知道怎么处理。我将所有“False”更新为 0,一切都很好。
    【解决方案3】:

    我遇到了同样的问题。我的解决方案是将列的类型从“bit”更改为“tinyint”。

    我的问题是由表中手动添加的列引起的。

    【讨论】:

      猜你喜欢
      • 2012-11-13
      • 2016-04-13
      • 2014-10-10
      • 2022-06-25
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多