Django TypeError问题求助:float()参数应为字符串/数字而非tuple
问题分析与解决方法
错误原因
你遇到的TypeError核心问题是赋值语句末尾多余的逗号。在Python中,变量赋值后加逗号会自动将值包装成元组,比如:
form.instance.bought_price = price,
这行代码实际是把(price,)这个元组赋值给了bought_price字段,而Django的FloatField仅接受数值类型(如int、float),所以抛出了"Field 'bought_price' expected a number but got (xxx,)"的错误。哪怕你将price转换为Python原生float或设置静态值,只要保留逗号,赋值结果依然是元组,问题无法解决。
解决步骤
- 移除所有赋值语句末尾的逗号
- 可选:将numpy的float64类型转换为Python原生float,避免潜在类型兼容问题
修改后的视图代码片段:
if request.method == 'POST': form = BuyForm(request.POST) if form.is_valid(): # 移除末尾逗号,将numpy float转为原生float form.instance.coin = ticker.info['name'] form.instance.symbol = ticker.info['symbol'] form.instance.bought_price = float(price) form.instance.user = request.user form.save() return redirect('portfolio') else: # 修正原逻辑:仅在GET请求时初始化空表单,保留验证失败的表单数据 form = BuyForm()
额外提示:原代码的else分支逻辑有误——当form.is_valid()为False时重新初始化空表单,会导致用户输入的错误数据丢失。正确的做法是将空表单初始化放在POST判断的外部,保留验证失败的表单以展示错误提示。
内容的提问来源于stack exchange,提问作者Akshay Saambram
相关产品推荐
相关产品推荐

