objects.all()。annotate结果并不完全是我想要的

时间:2012-04-26 20:43:42

标签: django django-templates

这是我的代码:

模型:

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

  def get_month_sum_series(self):
    return [('2012-01-01',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)

view.py:

from django.template import Context, loader
from accounts.models import Category, Operation
from django.http import HttpResponse

from django.db.models import Sum, Max

def index(request):
  category_list = Category.objects.all().annotate(suma = Sum('operation__value'))

  template = loader.get_template('reports/index.html')
  context = Context({
    'category_list' : category_list,
  })
  return HttpResponse(template.render(context))

模板:

{% if category_list %}
<table>
{% for category in category_list %}
<tr><td><a href="{{ category.id }}/">{{ category.name }}</a></td><td style="text-align:right">{{ category.suma|default:0|currency }}</td>
{% for month_sum in category.get_month_sum_series %}
<td>{{ month_sum.1|default:0|currency }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% else %}
{% endif %}

category.get_month_sum_series不起作用....

但如果我改变

category_list = Category.objects.all().annotate(suma = Sum('operation__value'))

category_list = Category.objects.all()

category.get_month_sum_series不起作用.....  (但当然是注释部分 - 不是)

如何更改category_list或view以获取它们?

1 个答案:

答案 0 :(得分:0)

好。它看起来像Category.objects.all()。annotate与Category.objects.annotate不同 - 或者我没有重新启动apache足够的时间; D