Python 中 \x00 和空字符串的区别,以及在 Django 中的坑

事情是这样的,我有一个守护进程,不停地从 RabbitMQ 消费数据,然后保存到 MySQL。操作数据库使用的是 Django 的 ORM 语法。

最近一段时间,频繁发生一个问题,就是有一类数据,守护进程从后台使用 create 方法,直接入库完全没问题。但是,在页面上,通过表单来修改这条数据,无论如何都无法保存成功,报错信息提示某一个字段不能为空。但是这个字段明明是有值的,很让人费解。

仔细分析了代码之后,感觉可能发生问题的只有这一句:

serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)

因为打印 serializer 是有值的,所以肯定是 is_valid 做表单验证时给过滤掉了。但是为什么会过滤就需要更深一步去探索了。

通过单步调试,走到函数的调用关系中,发现了问题的关键所在。

​```python
# django/forms/fields.py

class CharField(Field):
    def __init__(self, *, max_length=None, min_length=None, strip=True, empty_value='', **kwargs):
        self.max_length = max_length
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值