我有一个与(quantidadeEvento)有一对多关系的模型(camisaEvento)。我想在模板上显示quantdadeEvento中字段的总和,但仅针对camisaEvento上的确定记录的元素。
在视图上我有以下内容,它们被传递给模板到render_to_response:
camisasEvento = camisaEvento.objects.all()
quantidadesEvento = quantidadeEvento.objects.all()
我为camisaEvento的每个记录制作一个表格,最后我希望它有一个单元格,它是quantdadeEvento上确定字段的总和,但仅适用于for循环中的当前camisaEvento记录,所以在模板中我有以下内容:
{% for camisa_do_evento in camisasEvento %}
<table>
<td>...<td>
<td>...<td>
.
.
.
<td>The sum should be in here</td>
<table>
{% endfor %}
最好的方法是什么?我知道这可能很简单,但我对编程和Django都很陌生。
由于
答案 0 :(得分:3)
您应该使用aggregation framework来计算视图中的总和:
from django.db.models import Sum
camisasEvento = camisaEvento.objects.all().annotate(quantidade_sum=Sum('quantidadeevento__field_to_sum')
其中'field_to_sum'是您要添加的字段。这会在每个quantidade_sum
上创建一个名为camisasEvento
的属性,该属性包含相关字段的总和。
请注意,在模板中,您可以使用反向关系遍历与每个camisaEvento相关的quantdadeEvento对象:
<table>
{% for camisa_do_evento in camisasEvento %}
<tr>
{% for quantidade_evento in camisa_do_evento.quantidadeEvento.all %}
<td>{{ quantidade_evento.my_field }}<td>
{% endfor }
<td>Sum: {{ camisa_do_evento.quantidade_sum }}</td>
</tr>
{% endfor %}
<table>
答案 1 :(得分:1)
为什么不在camisaEvento上使用属性?
class camisaEvento(models.Model):
...
@property
def sum_quantity(self):
# just guessing, don't know exactly what you need
# it's using python's list comprehension, but you can use a more explicit
# syntax if you're not familiar with this one
return sum([obj.field_to_sum for obj in
quantidadeEvento.objects.filter(fk_field=self.id)])
然后,在您的模板中:
{% for camisa_do_evento in camisasEvento %}
{{ camisa_do_evento.sum_quantity }}
{% endfor %}
这是如何工作的:我正在camisaEvento
类创建一个方法来获取该类的所有quantidadeEvento
并总结他们的字段(这是“幻想”逻辑,因为我不知道确切地知道你需要总和的东西)。然后,在您的模板中,您只需调用该方法,就好像它是您的camisaEvento类的真实属性