Djangoで工事台帳を作成しており、
工事ごとの請負金額を取りまとめる表を作成したいと考えています。
例えば、下記のように、当初、追加1、追加2を入力すると(Adminsiteで入力し、これはできています。)、計を計算して表示されるようにしたいです。
当初 10,000,000円
追加1 2,000,000円
追加2 1,000,000円
計 13,000,000円
model.pyは、下記の通りで問題ないと思います。
lang
1#models.py 2# -*- coding: utf-8 -*- 3from django.db import models 4class ContractPrice(models.Model): 5 site_id = models.ForeignKey(Site) 6 price = models.IntegerField(u'税込金額')
views.pyがうまくいっていないと思います。
lang
1#views.py 2# -*- coding: utf-8 -*- 3from django.shortcuts import render_to_response, get_object_or_404 4from django.http import HttpResponse 5from django.template import RequestContext 6from cls.models import ContractPrice, Owner, Site 7 8def site_detail(request, id): 9 if id: 10 site = get_object_or_404(Site, pk = id) 11 else: 12 id = Site() 13 site = Site.objects.filter(id = id) 14 prices = ContractPrice.objects.filter(site_id = id) 15 totalsales = sum(prices.price) 16 return render_to_response('cls/site_detail.html', 17 {'site' : site, 'contractprice' : price, 'totalsales' : totalsales}, 18 context_instance = RequestContext(request) 19 )
上記のように、
totalsales という変数に、請負金額の合計を代入するために、
totalsales = sum(prices.price)
としました。
pricesは、idで絞り込んだ要素を意味するので、そのpriceアトリビュートを合計すればよいと思ったためです。
しかし、
「AttributeError
'QuerySet' object has no attribute 'price'」
というエラーが出ます。
sumの使い方が誤っているのかと思い、外してみましたが、結果は同じでした。
ちなみに、annotateを使えば解決するのかと思い、
totalsales = prices.annotate(Sum('price'))
としてみましたが、
「NameError
global name 'Sum' is not defined」
というエラーが出ました。
私の考え方のどこかが誤っているのだと思いますが、お分かりの方、ご教示いただけないでしょうか。
お手数をお掛けしますが、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2015/06/28 10:27