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

我在Question模型上有一个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'

最佳答案 模型实例只是一个python对象.您可以将任何属性设置为任何值.

保存实例时,所有数据都将转换为适当的数据类型,以达到Django的最佳功能.对于BooleanField,这意味着任何truthy值(bool(value)为True)保存为True,任何falsy值(bool(value)为False)都保存为False.

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

点赞