Как использовать условие if else с помощью математических фильтров в Django?
У меня есть вопрос, я делаю проект на Django и есть часть приложения под названием Pagos(payments), там я показываю следующее: payments made, total_pagos(total payment) и pending payment,
Для отображения информации об этих платежах я использую mathfilters, потому что сложение и вычитание используются в моих шаблонах.
Для шаблона он отображает информацию правильно, только проблема возникает, когда я хочу использовать условные знаки, так как когда отложенный платеж равен 0.00, это означает, что клиент уже все оплатил и должен показать текст, который говорит "PAGADO" (оплачено), когда отложенный платеж имеет другое число, чем 0.00, должен показать метку, которая говорит "PENDIENTE" (отложено).
Вот код, который я использую, и он работает, так как он показывает мне результат стоимости costo_servicio (сумма услуги) минус total_pagos (общая сумма платежей), все, что он показывает, является предстоящим платежом, он может показывать несколько чисел или 0.00:
{% for juicio in juicios %}
{{ juicio.costo_servicio|sub:total_pagos }}
{% endfor %}
Но если я поставлю это, то он не покажет if и, следовательно, не выполнит вычитание и не покажет текст PAGADO(paid):
{% for juicio in juicios %}
{% if juicio.costo_servicio|sub:total_pagos == 0.00 %}
{{ juicio.costo_servicio|sub:total_pagos }}
<td class="text-right"><span class="saldo-pagado" ><strong>PAGADO</strong></span></td>
{% endif %}
{% endfor %}
Я поделюсь с вами остальными моделями и своими взглядами:
juicios models.py
class Juicios(models.Model):
cliente = models.ForeignKey(Cliente, on_delete=models.CASCADE)
no_expediente_cv = models.CharField(max_length=100)
costo_servicio=models.DecimalField(max_digits=10, decimal_places=2)
pagos models.py
class Pagos(models.Model):
cliente = models.ForeignKey(Cliente, on_delete=models.CASCADE)
monto_pago=models.IntegerField()
pagos view.py
def PagosDetalle(request, cliente_id):
context = {}
cliente = Cliente.objects.get(id=cliente_id)
pagos = Pagos.objects.filter(cliente=cliente_id)
juicios = Juicios.objects.filter(cliente=cliente_id)
total_pagos = Pagos.objects.filter(cliente=cliente).aggregate(sum_of_all_orders=Sum('monto_pago'))
pagos_filtrados=Pagos.objects.filter(cliente=cliente)
context["pagos"] = pagos
context["pagos_filtrados"] = pagos_filtrados
context["total_pagos"] = total_pagos['sum_of_all_orders']
if juicios:
context["juicios"] = juicios
return render(request, "pagos-detalle.html",context)
Вы можете использовать тег with
для хранения результата вычисления в переменной шаблона, например:
{% with juicio.costo_servicio|sub:total_pagos as result %}
{% if result == 0 %}
...
{% endif %}
{% endwith %}