让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)

猜你喜欢

转载自blog.csdn.net/qq_42772649/article/details/82830870