python-3.x - 如何添加到 Django 中的 JSON 字段
问题描述
AIM --- 我正在使用 Django 为一个项目制作一个模拟交易网站。我在尝试跟踪一个人拥有的股票时遇到了问题。问题是,如果有人买了 4 只 TSLA 股票,然后又买了 4 只,那么它应该被视为 8 只 TSLA 股票,如果他们愿意,他们可以从中卖出 7 只。(顺便说一句,我正在使用 postgresql)
问题---事实证明这很难做到,我找不到任何可以帮助我跟踪一个人拥有的股票的东西。所以,我读了又读,最后转向 JSON 字段。但是,当我这样做时,我遇到了一个问题
u.stocks_owned = {f"{ticker}" : f"{stocks_bought_here}"}
u.save()
它有效,它添加了一个带有代码和数字的键值对,但我不知道如何使用它创建一个新行,或者如果有人已经拥有公司的一些股票,那么我该如何添加呢? ?
结论 --- 我不需要为我编写代码,只需为我指明正确的方向,我会自己弄清楚!
用户模型 -
class User_Info(models.Model):
user = models.OneToOneField(User, null=True, related_name='info', on_delete = models.CASCADE)
username = models.CharField(max_length=200, null=True)
name = models.CharField(max_length=200, null=True, blank = True)
phone = models.CharField(max_length=200, null=True, blank = True)
email = models.CharField(max_length=200, null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
balance = models.FloatField(null = True)
virtual_money_bought = models.BigIntegerField(null=True)
stocks_owned = models.JSONField(null=True)
def __str__(self):
return self.username
我正在使用的视图——
if new_balance >= 0 and balance_pre_trade >= latestPrice * stocks_bought_here :
Trade.objects.create(
ticker = ticker,
stocks_bought = stocks_bought_here,
action = "Bought",
trader = user.info,
price_trade_at = latestPrice,
company_name = companyName,
balance_of_trader_after_purchase= new_balance
)
u = User_Info.objects.get(user = user)
u.balance = new_balance
u.stocks_owned = {f"{ticker}" : f"{stocks_bought_here}"}
u.save()
messages.success(request, f"You bought {stocks_bought_here} from {companyName} at a price of {latestPrice} ")
return redirect ("user")
else:
messages.error(request, "You dont have enough money in your account")
解决方案
推荐阅读
- algorithm - 开发算法以获得覆盖范围从 1 到 n 所需的最小子范围数
- python - 同一目录级别的模块的 Python 导入
- node.js - 如何在 express 中使用带有完整 url 或子域的 get 方法?
- c++ - 使用 iostream (std::wcout) 打印 CComBSTR
- sql-server - 服务器资源管理器与 SQL Server 对象资源管理器
- php - 如何从解码的 json - wordpress 中的 PHP 多维数组中获取所需的输出?
- spring-boot - 大摇大摆,@Configuration 不适用于 SpringFoxConfig
- c++ - 使用 c++ OOB 的蛇游戏
- jenkins - Jenkins 仅在另一个管道已成功构建时才允许手动构建
- python - Spark在使用pyarrow时拒绝创建空数据框