gpt4 book ai didi

python - 在 Django 模板中进行总结

转载 作者:行者123 更新时间:2023-11-28 17:54:04 26 4
gpt4 key购买 nike

我在 django 中有以下模板,我想获取每个文档对象的最后两列的总数

{% for documento in documentos %}
{% for cuenta in documento.cuentasxdocumento_set.all %}
<tr {% cycle 'class="gray"' '' %} >
{% if forloop.first %}
<td>{{ documento.fecha_creacion.date }}</td>
<td>{{ cuenta.cuenta.nombre }}</td>
<td>
{% if cuenta.monto >= 0 %}
{{ cuenta.monto}}
{% endif %}
</td>
<td>
{% if cuenta.monto <= 0 %}
{{ cuenta.monto }}
{% endif %}
</td>
{% else %}

<td colspan="4"></td>
<td>{{ cuenta.cuenta.codigo }}</td>
<td>{{ cuenta.cuenta.nombre }}</td>
<td>
{% if cuenta.monto <= 0 %}
{{ cuenta.monto }}
{% endif %}
</td>
<td>
{% if cuenta.monto >= 0 %}
{{ cuenta.monto }}
{% endif %}
</td>

{% endif %}
</tr>
{% endfor %}
<tr>
<td colspan="1"></td>
<td>Document Total</td>
<td></td>
<td></td>
</tr>
{% endfor %}

这一切都是使用以下模型完成的,这些模型为了这个问题的目的而被简化

class Documento(models.Model):
numero_impreso = models.CharField(max_length=50)
fecha_creacion = models.DateTimeField(auto_now_add = True)


cuentas = models.ManyToManyField('CuentaContable', through = 'CuentasXDocumento', null = True)

def __unicode__(self):
return self.tipo.nombre + ": " + self.numero_impreso

class CuentasXDocumento(models.Model):
cuenta = models.ForeignKey('CuentaContable')
documento = models.ForeignKey('Documento')

monto = models.DecimalField(max_digits= 14, decimal_places = 6)
linea = models.IntegerField()

class CuentaContable(models.Model):
codigo = models.CharField(max_length=50)
nombre = models.CharField(max_length=100)
def __unicode__(self):
return self.nombre

最后,我对糟糕的英语感到抱歉:)

最佳答案

根据我使用 Django 的经验,我会说这些事情在模板中不容易完成。我尝试在 View 而不是模板中进行计算。

我的建议是在 View 而不是模板中计算您需要的两个总和。

有人说,可以使用 custom filters and tags 在模板中做一些工作.使用过滤器它可能看起来像这样:

<td>{% documento.cuentasxdocumento_set.all | sum_monto:"pos" %}</td>
<td>{% documento.cuentasxdocumento_set.all | sum_monto:"neg" %}</td>

过滤器有两个参数,一个是您传递给过滤器的值,另一个是您可以用来控制其行为的参数。您可以使用最后一个参数告诉 sum_monto 对正值或负值求和。

这是一个未经测试的快速过滤器实现:

from django import template

register = template.Library()

@register.filter
def sum_monto(cuentas, op):
if op == "pos":
return sum(c.monto for c in cuentas if c.monto > 0)
else
return sum(c.monto for c in cuentas if c.monto < 0)

关于python - 在 Django 模板中进行总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3748356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com