2024-05-14 23:45:36 发布
网友
假设动物园模型上有一个空布尔场:
class Zoo(models.model): lion = NullBooleanField()
为什么它让我保存一个非布尔字段,然后默认为true,而不是出错?例如:
因为NullBooleanField只是试图转换为Python对象,在本例中,None,True,或{}。在
NullBooleanField
None
True
因此,任何bool铸造都会起作用,也会作用于这个领域,因为这就是它在后台所做的。在
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在哪里被调用。在
我试图用django1.7复制这个结果,结果更奇怪。在
>>> zoo = Zoo.objects.create() >>> zoo.lion = 'Simba' >>> zoo.save() >>> zoo.lion 'Simba' >>> type(zoo.lion) <type 'str'>
当然,我刚刚覆盖了本地对象的属性。我也可以这样做:
但是,当我通过将本地对象从数据库中拉出来刷新它时:
>>> zoo = Zoo.objects.get(pk=1) >>> zoo.lion True >>> type(zoo.lion) <type 'bool'>
在任何时候都没有引发异常,但它确实被转换为布尔值。我开始怀疑to_python在哪里被调用。在
to_python
因为}。在
NullBooleanField
只是试图转换为Python对象,在本例中,None
,True
,或{因此,任何
bool
铸造都会起作用,也会作用于这个领域,因为这就是它在后台所做的。在编辑:
这可能是个bug。而{{cd11}
编辑2:
我试图用django1.7复制这个结果,结果更奇怪。在
当然,我刚刚覆盖了本地对象的属性。我也可以这样做:
^{pr2}$但是,当我通过将本地对象从数据库中拉出来刷新它时:
在任何时候都没有引发异常,但它确实被转换为布尔值。我开始怀疑
to_python
在哪里被调用。在相关问题 更多 >
编程相关推荐