0

我在将 sql 分组写入 django 应用程序时遇到问题。你们中的任何 django 用户都可以帮助我如何将这个 sql 写成对 django 友好的代码吗?这是我的模型:

class Stock(models.Model):
    name = models.CharField("Stock's name", max_length=200)
    symbol = models.CharField("Stock's symbol", max_length=20)

class Dividend(models.Model):
    amount = models.FloatField(default=0)
    date = models.DateField('pay date')
    stock = models.ForeignKey(Stock)

class UserStock(models.Model):
    amount = models.FloatField('amount', default=0)
    date = models.DateField('buy date')
    price = models.FloatField('price', default=0)
    user = models.ForeignKey(User)
    stock = models.ForeignKey(Stock)

这是我想用 django 编写的 sql 代码:

select stock_id, sum(price), sum(amount) as price from stocks_userstock group by stock_id;

我试图写这样的东西。

my_stock = UserStock.objects.filter(user=request.user)\
    .annotate(sum_price = sum('price'), sum_amount = sum('amount'))

提前谢谢,我希望这对你们中的一些人来说不是问题。

4

2 回答 2

1

我相信只需添加一个values电话就可以了

my_stock = UserStock.objects.get(user=request.user)\
    .values('stock_id').annotate(sum_price = sum('price'), sum_amount = sum('amount'))

你会得到一个类似的字典列表

[
    {'stock_id': 0, 'sum_price': 10, 'sum_amount': 25},
    ...
]

看到这里了解更多信息

于 2013-04-23T19:28:53.883 回答
0
stock = Stock.objects.all().annotate(sum_price = Sum('user_stock__price'), sum_amount = Sum('user_stock__amount'))

它应该工作。

为了简化,我删除了User代码段中的过滤器,但您当然可以添加它。

于 2013-04-23T19:31:36.123 回答