Django:为什么NullBooleanField接受非布尔答案?

2024-05-14 23:45:36 发布

您现在位置:Python中文网/ 问答频道 /正文

假设动物园模型上有一个空布尔场:

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

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

^{pr2}$

Tags: 模型truemodelmodelsclass动物园zoolion
1条回答
网友
1楼 · 发布于 2024-05-14 23:45:36

因为NullBooleanField只是试图转换为Python对象,在本例中,NoneTrue,或{}。在

因此,任何bool铸造都会起作用,也会作用于这个领域,因为这就是它在后台所做的。在


编辑:

这可能是个bug。而{{cd11}


编辑2:

我试图用django1.7复制这个结果,结果更奇怪。在

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

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

^{pr2}$

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

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

在任何时候都没有引发异常,但它确实被转换为布尔值。我开始怀疑to_python在哪里被调用。在

相关问题 更多 >

    热门问题