让Django的BooleanField支持字符串形式的输入

1、问题:
在Django中,可以把字符串形式的数值赋值给IntegerField,然后Django会默认把字符串转换成int。但是BooleanField则不行,BooleanField只能接受True和False,或者0和1(BTW:在python中True即是1,False即是0)。这对于很多网络参数上传的场景很不利,因为很多时候我们处于方便会将布尔型参数转换成字符串形式来上传。
出现的错误:
django.core.exceptions.ValidationError: ["’’ value must be either Tr ue or False."]
2、解决方案:
找了好多方法:参考了大神的例子
这是一种一劳永逸的方案,在models.py 中,我们来重定义BooleanField的行为,在为其复制时,自动将字符串以我们想要的规则转换成Bool值。代码如下:

from django.db.models import BooleanField as _BooleanField
# Create your models here.
class BooleanField(_BooleanField):
    def get_prep_value(self, value):
        if value in ("0", "false", "False"):
            return False
        elif  value in ("1", "true", "True"):
            return True
        else:
           return super(BooleanField, self).get_prep_value(value)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值