gpt4 book ai didi

python - Django:为什么 NullBooleanField 接受非 bool 答案?

转载 作者:太空狗 更新时间:2023-10-30 02:30:10 24 4
gpt4 key购买 nike

假设我在 Zoo 模型上有一个 NullBooleanField:

class Zoo(models.model):
lion = NullBooleanField()

为什么它让我保存一个非 bool 字段,然后默认为 true,而不是出错?例如:

my_zoo = Zoo.objects.create()
my_zoo.lion = "Simba"
my_zoo.save() # Surprisingly, no error here.
>>>my_zoo.lion # True

最佳答案

因为 NullBooleanField 只是试图转换为 Python 对象,在这种情况下,NoneTrueFalse.

因此,任何 bool 转换都将起作用,将在该字段上起作用,因为这是它在后台所做的。


编辑:

这可能是一个错误。看着 source code for this ,您可以看到它只应该接受值 TrueFalseNone't''f', '真', '假', '无', '0' '1'(甚至不是 01!)。至少从 Django 1.5 开始就是这样。您使用的是哪个版本的 Django?


编辑 2:

我尝试使用 Django 1.7 重现此结果,结果甚至更奇怪。

>>> zoo = Zoo.objects.create()
>>> zoo.lion = 'Simba'
>>> zoo.save()
>>> zoo.lion
'Simba'
>>> type(zoo.lion)
<type 'str'>

当然,我这里只是覆盖了本地对象上的属性。我也可以这样做:

>>> zoo.walrus = 'Simba'
>>> zoo.walrus
'Simba'

但是,当我通过将本地对象从数据库中拉回来刷新本地对象时:

>>> zoo = Zoo.objects.get(pk=1)
>>> zoo.lion
True
>>> type(zoo.lion)
<type 'bool'>

在任何时候都没有引发异常,但它确实被转换为 bool 值。我开始猜测甚至在哪里调用了 to_python

关于python - Django:为什么 NullBooleanField 接受非 bool 答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com