Exemplo n.º 1
0
def total_apples_by_month(request):
    '''リンゴの月別品種別合計数量を返す'''
    results = []
    apples = Apple()
    tweets = Tweets.objects.extra(select={ 'month': "date_part('month', tweeted_at)::int" }) \
        .values('name', 'month').annotate(quantity=models.Count('name')).order_by('name', 'month')

    # DBで縦持ちしているものをHighchartsのために横持ちにする
    name = tweets[0]['name']
    quantities = [0] * 12

    for tweet in tweets:
        if name != tweet['name']:
            results.append(OrderedDict([
                ('name', name),
                ('quantity', quantities),
                ('color', apples.get_color(name))
            ]))

            name = tweet['name']
            quantities = [0] * 12

        quantities[tweet['month'] - 1] = tweet['quantity']

    results.append(OrderedDict([
        ('name', name),
        ('quantity', quantities),
        ('color', apples.get_color(name))
    ]))
    return render_json_response(request, results)
Exemplo n.º 2
0
def total_apples(request):
    '''リンゴの品種別合計数量を返す'''
    results = []
    apples = Apple()

    # valuesで取得したい項目、annotateで別途集計したい項目をそれぞれ取得できる
    for tweet in Tweets.objects.values('name').annotate(quantity=models.Count('name')):

        apple_dict = OrderedDict([
            ('name', tweet['name']),
            ('quantity', tweet['quantity']),
            ('color', apples.get_color(tweet['name']))
        ])
        results.append(apple_dict)

    return render_json_response(request, results)