編集済み (Django 1.8 以降)
Django 1.8 以降、以下を使用できますF
。
from django.db.models import F. Sum
total = (
Task
.objects
.aggregate(total=Sum(F('progress') * F('estimated_days')))
['total']
)
古い回答 (Django 1.8 より前)
この回答は2012年に書かれ、django 1.8は2015年に公開されました
いくつかのオプションがありますか:
- 生のクエリ
- Emulbreh の文書化されていないアプローチ
- 3 番目のフィールド
progress_X_estimated_days
を作成し、上書き保存メソッドで更新します。次に、この新しいフィールドを介して集計を行います。
上書き:
class Task(models.Model):
progress = models.PositiveIntegerField()
estimated_days = models.PositiveIntegerField()
progress_X_estimated_days = models.PositiveIntegerField(editable=False)
def save(self, *args, **kwargs):
progress_X_estimated_days = self.progress * self.estimated_days
super(Task, self).save(*args, **kwargs)