is_important
是从
GET
QueryDict
作为(大概)非空字符串。当您将此类字符串作为参数传递给
(Null)BooleanField
,ORM将其转换为
bool
,由于非空字符串的计算结果为
True
,这就是存储在数据库中的内容。
假设你通过了
'True'
,
'False'
或
'None'
作为的get参数
重要(_I)
,您可以这样做:
is_important = request.GET.get('is_important') # this is a string
is_important = {'True': True, 'False': False, 'None': None}[is_important]
我也许应该补充一下
.objects.create()
和返回的实例
.objects.get()
不一定相同,即使
get
call检索由
create
呼叫前者仍将具有作为
kwargs
(就像绳子一样
“假”
)而后者将具有从数据库检索到的属性(因此
BooleanField
现在将被强制转换为
布尔
):
choice = Choice.objects.create(user=user, card=card, is_important=is_important)
# choice.is_important = 'False'
choice = Choice.objects.get(user=user, card=card, is_important=is_important)
# choice.is_important = True (= bool('False'))