【问题标题】:Django If statement with boolean fields not working带有布尔字段的Django If语句不起作用
【发布时间】:2020-02-27 23:45:06
【问题描述】:

我从这样的查询集中获取布尔值:

activo = Carros.objects.all().values_list('is_active', flat=True).filter(nombre='carro')

那么我的 if 语句是这样的:

if activo == True:
   raise forms.ValidationError('El Auto está activo')

即使变量 'activo' 获得 True 值,它也不会返回 ValidationError。

我所做的是设置一个变量

a = True

然后在if语句中添加

if activo == True:
   raise forms.ValidationError('El Auto está activo')

而且它有效。

在 Python shell 中,每当我执行查询时,我都会看到类似这样的结果

<QuerySet [True]>

我不确定是什么问题。

模型中的'is_active'字段:

is_active = models.BooleanField(blank=False, null=False, default=True)

注意:数据库是 Postgresql

【问题讨论】:

    标签: python django postgresql django-queryset


    【解决方案1】:

    'use_pure': True 添加到数据库选项。 这迫使 mysql-connector-python 使用纯 python 连接而不是 C 扩展,我相信错误存在于其中,请参阅here

    DATABASES = {
        'default': {
            'ENGINE': 'mysql.connector.django',
            'NAME': os.environ['MYSQL_DATABASE'],
            'USER': os.environ['MYSQL_USER'],
            'PASSWORD': os.environ['MYSQL_PASSWORD'],
            'OPTIONS': {
                'use_pure': True,
        }
    }
    

    或者您也可以在 settings.py 文件中进行设置

    'OPTIONS': {'use_pure': True }

    编辑:

    由于您的输出正在重新调整查询集,因此您需要检查该值以确保其为真。你可以这样做

    activo = <your query set>
    print(activo[0])#should return True
    
    if activo[0]:
       raise forms.ValidationError('El Auto está activo')
    
    
    

    【讨论】:

    • 欢迎尝试
    • 如果我使用 ' if activo: ' 即使如果是 False 它在不应该的时候给我 ValidationError
    • 这是不可能的。仅当布尔值为 true 时才会返回此验证错误。我的猜测是,当您期待错误时,activo 会返回 true。您可以通过在 if 语句之前添加 activo 的打印行来检查这一点。
    • 是的,我得到了这个 我不知道为什么查询会检索这样的数据,而不是纯“假”或“真”
    • 该死!完全忘记了,谢谢!现在可以了。
    猜你喜欢
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多