0

我有一个与(quantidadeEvento)有一对多关系的模型(camisaEvento)。我想在模板上显示 quantidadeEvento 中字段的总和,但仅适用于 camisaEvento 上已确定记录的元素。

在视图上,我有以下内容,它们被传递给模板到 render_to_response:

camisasEvento = camisaEvento.objects.all()
quantidadesEvento = quantidadeEvento.objects.all()

我正在为 camisaEvento 的每条记录制作一个表格,最后我希望它有一个单元格,它是 quantidadeEvento 上已确定字段的总和,但仅适用于 for 循环上的当前 camisaEvento 记录,所以在模板中我有以下内容:

{% for camisa_do_evento in camisasEvento %}
<table>
    <td>...<td>
    <td>...<td>
    .
    .
    .
    <td>The sum should be in here</td>
<table>
{% endfor %}

做这个的最好方式是什么?我知道这可能很简单,但我对编程和 Django 还是很陌生。

谢谢

4

2 回答 2

3

您应该使用聚合框架来计算总和,在视图中:

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 相关的 quantidadeEvento 对象:

<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>
于 2013-08-15T14:31:21.027 回答
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 类的真实属性一样

于 2013-08-15T13:26:20.277 回答