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

Python Django BooleanField接受非布尔类型对象,python,django,Python,Django,我有一个关于问题模型的布尔域: 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 >>

我有一个关于问题模型的布尔域:

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'
是正确的-您的线路:

que_obj.is_deleted='yes'
将重写布尔值以包含字符串“yes”。您可以使用
bool()
函数检查布尔值,如下所示:

que_obj.is_deleted=bool('yes')

下面是
bool()
的条目,模型实例只是一个python对象。可以将任何属性设置为任何值

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


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

您正在使用SQLite吗?如果是,看起来就没有了——SQLite不关心类型——并切换到一个真正的dbms(或者至少是一个半备份的dbms)。@peter实际上不是真的。在常规python中,您当然会调用@NightShadeQueen-ah。我的错,是的。转换为布尔类型。因此,您可以在python级别将任何属性设置为任何值??是的。保存对象并将值转换为数据库值时,某些字段类型可能会出错。例如,Django无法将
'yes'
转换为
日期时间字段
的有效日期时间对象。
BooleanField
没有这个问题(
bool(value)
适用于任何python值),因此不会在那里出现任何错误。现在清除:)回答得很好。Django具有将值转换为正确类型的方法。