Django BooleanField接受非布尔类型的对象

时间:2015-09-02 14:45:56

标签: python django

我在问题模型上有一个BooleanField:

class Question(models.model):
    is_deleted = BooleanField()

为什么它接受非布尔类型的python对象?

>>>que_obj = Question.objects.create()
>>>que_obj.is_deleted='yes'
>>>que_obj.save()
>>>que_obj.is_deleted
>>>'yes'

2 个答案:

答案 0 :(得分:2)

模型实例只是一个python对象。您可以将任何属性设置为任何值。

保存实例时,所有数据都会转换为适当的数据类型,以达到Django的最佳功能。对于BooleanField,这意味着任何真实值(bool(value) is True)都会保存为True,而任何虚假值(bool(value) is False)都会保存为False

保存模型时,将读取字段的当前值,将其转换为适当的数据类型,并保存到数据库中。该字段的原始值不会改变。从数据库重新加载模型时,该字段将保存在数据库中的实际值:True

答案 1 :(得分:0)

peter是对的 - 你的路线:

que_obj.is_deleted='yes'

将覆盖布尔值,现在包含字符串'yes'。您可以使用bool()函数检查布尔值,如下所示:

que_obj.is_deleted=bool('yes')

以下是bool()

docs条目