0

モデル:

class Category(models.Model):
  name = models.CharField(max_length=100)

class Operation(models.Model):
  date = models.DateField()
  value = models.DecimalField(max_digits = 9, decimal_places = 2)
  category = models.ForeignKey(Category, null = True)
  comments = models.TextField(null = True)

ここで、13 列のビューを作成します。

カテゴリ名 | -11 | -10 | -9 | ... | -1 | 0

例えば。

...食品.. | $123.00 | $100.14 | ... | $120.13| $54.12
.服| $555.23 | $232.23 | ... | $200.12| $84.44

ここで、たとえば $123.00 は、11 か月前、$100.14 - 10 か月前に作成されたカテゴリの食品の操作の値の合計です - $54.12 は当月の合計です。

私はたくさんグーグルで検索しましたが、ほとんどの例は単純です-関連するクラス(カテゴリ)なし

回答1の提案後の正解:

def get_month_sum_series(self):
  import qsstats, datetime
  from django.db.models import Sum
  qss = qsstats.QuerySetStats(self.operation_set.all(), date_field='date', aggregate_field='value',aggregate_class=Sum)
  today = datetime.date.today()
  year_ago = today - datetime.timedelta(days=365)
  return qss.time_series( start_date=year_ago, end_date=today, interval='months')
4

1 に答える 1

0

django-qsstatsを見てください。time_series1 回のリクエストで一連のデータ全体を取得できる機能があります。あなたの場合Category、次のようなメソッドを作成します。

def price_series(self):
    return qsstats.time_series(queryset=self.operation_set.all(), start_date=year_ago, end_date=now, interval='months')

もちろん、変数を設定する必要がyear_agoありnowます (たとえば、datetimeモジュール関数を使用します)。

于 2012-04-21T04:17:01.763 に答える