英文:
TypeError in Django: "float () argument must be a string or a number, not 'tuple.'"
问题
以下是您要翻译的内容:
描述:
尝试访问与加密货币(在本例中是狗狗币)相关的特定页面时,我在我的Django应用程序中收到一个TypeError。错误通知中写着:“字段'购买价格'期望一个数字,但却得到了(0.07314770668745041,)”。回溯还说明问题出在float()函数上,并且一个元组被用作参数。
然而,传递的值并不是一个'元组'。它是numpyfloat64类型,因此我尝试在Python中将其转换为float类型后再传递相同的值。即使我提供表单一个静态值,问题仍然会发生。form.instance.bought_at = 45.66
也导致了相同的问题。
是否有人可以帮助我理解为什么会发生这个错误以及如何解决它?
以下是相关的代码:
模型代码:
class Order(models.Model):
coin = models.CharField(max_length=100)
symbol = models.CharField(max_length=50)
bought_price = models.FloatField()
quantity = models.IntegerField(default=1)
bought_at = models.DateTimeField(default=datetime.now)
user = models.ForeignKey(User, on_delete=models.CASCADE)
视图代码:
ticker = yf.Ticker(symbols[pk])
price_arr = ticker.history(period='1d')['Close']
price = np.array(price_arr)[0]
if request.method == 'POST':
form = BuyForm(request.POST)
if form.is_valid():
form.instance.coin = ticker.info['name'],
form.instance.symbol = ticker.info['symbol'],
form.instance.bought_price = price,
form.instance.user = request.user
form.save()
return redirect('portfolio')
else:
form = BuyForm()
感谢您提供的任何帮助或见解。谢谢!
英文:
Description:
When attempting to access a specific page that relate to a cryptocurrency, in this case Dogecoin, I receive a TypeError in my Django application. "Field 'bought_price' expected a number but got (0.07314770668745041,)" reads the error notice. The traceback also states that the problem is with the float() function and that a tuple was used as the argument.
The passed value, however, is not a 'tuple'. It is a numpyfloat64 type, therefore I tried passing the same value after converting it to a float type in Python. Even if I provide the form a static value, the problem still occurs. form.instance.bought_at = 45.66
results in the same issue.
Could anyone help me understand why this error is occurring and how I can resolve it?
Here's the relevant code:
Model Code:
class Order(models.Model):
coin = models.CharField(max_length=100)
symbol = models.CharField(max_length=50)
bought_price = models.FloatField()
quantity = models.IntegerField(default=1)
bought_at = models.DateTimeField(default=datetime.now)
user = models.ForeignKey(User, on_delete=models.CASCADE)
View Code:
ticker = yf.Ticker(symbols[pk])
price_arr = ticker.history(period='1d')['Close']
price = np.array(price_arr)[0]
if request.method == 'POST':
form = BuyForm(request.POST)
if form.is_valid():
form.instance.coin = ticker.info['name'],
form.instance.symbol = ticker.info['symbol'],
form.instance.bought_price = price,
form.instance.user = request.user
form.save()
return redirect('portfolio')
else:
form = BuyForm()
I appreciate any assistance or insights you can provide. Thank you!
答案1
得分: 1
问题似乎是尾随逗号将 price
转换为元组。
form.instance.bought_price = price,
应该是
form.instance.bought_price = price
唯一的区别是末尾的逗号。其他赋值行前后可能也需要移除逗号。
查看此问题获取更多信息。
英文:
The problem appears to be the trailing comma turning price
into a tuple.
form.instance.bought_price = price,
should be
form.instance.bought_price = price
The only difference is the comma at the end. The other assignment lines before and after probably need their commas removed as well.
Check out this question for more.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论