You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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或设置静态值,只要保留逗号,赋值结果依然是元组,问题无法解决。

解决步骤

  1. 移除所有赋值语句末尾的逗号
  2. 可选:将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:13:16