首页 > 解决方案 > 如何添加到 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")

标签: python-3.xdjangopostgresqldjango-modelsdjango-views

解决方案


推荐阅读