如何获取查询集的每日总计

时间:2015-07-11 14:44:59

标签: python django

这里有新的Python / Django程序员。我一直在玩d3.js,我在创建多系列折线图时遇到了一些麻烦。我已经缩小了问题的范围,我认为这是因为我发送给d3的数据每天都有多个值。

我的问题,如果你选择回答它,是:如何计算每种交易类型(信用卡或借记卡)每天的总数?

Models.py

class Transaction(models.Model):
    class Transaction(models.Model):
    user = models.ForeignKey(Users, null=True)
    date = models.DateField(null=True, blank=True)
    description = models.TextField(max_length=75, null=True, blank=True)
    original_description = models.TextField(max_length=75, null=True, blank=True)
    amount = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True)
    transaction_type = models.TextField(max_length=75, null=True, blank=True)
    category = models.TextField(max_length=75, null=True, blank=True)
    account = models.ForeignKey(Account, null=True)
    account_name = models.TextField(max_length=75, null=True, blank=True)

dashboard.py

import homepage.models as hmod

@view_function
def process_request(request):
    params = {}

    if request.user.is_authenticated():
        user_session = request.user
        userid = user_session.id
    else:
        return HttpResponseRedirect('/homepage/login/')

    trans = hmod.Transaction.objects.all().filter(user_id=userid).values_list('date', 'transaction_type', 'amount', 'category', 'account_name').order_by('date')

    x = 0
    y = 0

    for tran in trans:
        if tran[1] == "credit":
            x += 1
        else:
            y += 1
    print(x)
    print(y)

    trans_json = json.dumps(list(trans), cls=DjangoJSONEncoder)

    params['trans_json'] = trans_json

    return templater.render_to_response(request, 'dashboard.html', params)

* x和y只是用来查找每种类型的交易总数,而我正在努力弄明白。

html / script - 只是摘录。如果有帮助,我可以包括整个脚本

//bring json data from dashboard.py
var data = ${trans_json}
...
// Group by transaction_type
    var credit = data.filter(function(d) {
      return d[1] == "credit";;
    });

    var debit = data.filter(function(d) {
      return d[1] == "debit";
    });
 ....
    svg.selectAll('.line')
      .data([debit, credit])
      .enter()
        .append('path')
          .attr('class', 'line')
          .style('stroke', function(d) {
            return colors(Math.random() * 50);
          })
          .attr('clip-path', 'url(#clip)')
          .attr('d', function(d) {
            return line(d);
          })

使用我当前的设置,数据将作为所有交易的长块(按"借记"或"信用)返回,格式为d =" 2014-09 -12,借记卡,-9.85,快餐,检查..." 但是,当我返回行(d)时,我得到了d =" MNaN,160.57661666666664CNaN,160.57661666666664,NaN ..."

的丑陋错误

我过去在http://bl.ocks.org/markmarkoh/8700606之后创建了一个折线图,但我使用的数据只有一个条目/天。这就是为什么我认为我的错误可能是因为用户每天往往会有多笔交易,因此很难划线。

我愿意接受你们所能提供的任何帮助。如果你可以帮助我获取我的查询集的每日总数并将其传递给脚本,真棒。或者,如果有更好的方法来实现我的愿望,我很乐意废弃并从另一个角度开始。

谢谢!

注意如果有小的语法错误(即$ {trans_json}),可能是因为我在一堆叫做django-mako-plus {{{ 3}} 然而,话虽如此,我也可能有真正的语法错误^^。我尝试过标记django-mako-plus,但它似乎还不是标签。

0 个答案:

没有答案