__month
を.values_list
に使用できないため、モデルにフィールドを追加することをお勧めします。 Values_listは、アノテーションの前にクエリをグループ化するために使用できます。
フィールドは次のようなものです。
year_month = models.CharField(index=True)
あなたがモデルのsaveメソッドを上書きし、あなたの価格に注釈を付けるために今
def save(self, *args, **kwargs)
# Not sure if auto_add_now already set the value, could use timezone.now()
if not self.id: # thus not saved yet
self.year_month = self.created_at.strftime("%Y%m")
super(Model, self).save(*args, **kwargs)
その可能性のようなものを行うことができます。
Project.objects.values_list('year_month').annotate(price_sum=Sum("price_aux"))
さらに詳しい情報が必要な場合は、values_listを拡張することができます。
Project.objects.values_list('year_month').annotate(price_sum=Sum("price_aux")) \
.values_list('name', 'year_month', 'price_sum')
フィールドを追加せずに行うことは可能です。過去1年がほしいと言いましょう。
import datetime
from django.utils import timezone
def my_list_view(request):
end = timezone.now()
# note, could do some weird stuff in years with 366 days
begin = (end - datetime.timedelta(days=365)).replace(day=1)
container = {}
while begin < end:
container[begin.strftime("%Y%m")] = 0
begin = (begin + datetime.timedelta(weeks=5).replace(day=1)
for project in Project.objects.iterator():
container[project.created_at.strftime("%Y%m")] += price
# Now you can render your template
を経由して、月ごとの価格を取得することができます。その後、月ごとに価格を選択することができます。 –
私はそのようなものを使用していますが、dbから蛾を抜き取るのは苦労しますが、小さな例ができますか? – PetarP
あなたのモデルが 'Prices'と呼ばれ、' month'と 'price'の2つのフィールドを持っていると仮定すると、' ppm = Prices.objects.filter(month = 1)[0] 'を実行します。 'ppm.price'はあなたに実際の価格を与えます。 –