2013-04-23 166 views
0

我有問題寫入組由sql進入Django應用程序。你們中的任何一位django用戶可以幫助我如何將這個sql寫入django友好的代碼?這是我的模型:羣由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) 

這是SQL代碼我想在Django寫:

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')) 

在此先感謝,我希望它不會成爲您的一些問題。

回答

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}, 
    ... 
] 

看到here更多信息

+0

它仍然給我像以前一樣的錯誤。 '.values(「stock_id」)行上的+:'int'和'str'的不受支持的操作數類型(注意:sum_price = sum('price'),sum_amount = sum('amount')) 。那些來自數據庫的數據應該是int,爲什麼是字符串? – Lucas03 2013-04-23 19:49:46

+0

我不知道,你以前從來沒有提過錯誤...你是否使用了適當的「Sum」? (它應該是資本,我只是使用你發佈的內容) – Ngenator 2013-04-23 19:56:44

+0

是的,這是總和小的第一個字母。謝謝。 – Lucas03 2013-04-23 20:23:28

0
stock = Stock.objects.all().annotate(sum_price = Sum('user_stock__price'), sum_amount = Sum('user_stock__amount')) 

它應該工作。

我已經刪除了User過濾器在我的代碼片簡化,但你可以添加它當然。