Как импортировать собственный класс в jinja?
Я пытаюсь проверить принадлежность объекта к определенному классу, но мне выдается ошибка:
Код:
history.html
{% extends 'core/base.html' %}
{% block title %}История{% endblock %}
{% block content %}
<h1 class="text-center">История</h1>
{% if transactions %}
{% for el in transactions %}
{% if isinstance(IncomeTransaction, el) %}
<div class="alert alert-warning">
<h3>Транзакция дохода</h3>
<p>Дата: {{ el.date }}</p>
<p>Сумма: {{el.amount}}</p>
<p>Комментарий: {{ el.commentary }}</p>
<p>Счет: {{ el.account.name }}</p>
<p>Категория дохода: {{ el.income_category.name }}</p>
</div>
{% endif %}
{% endfor %}
{% else %}
<p class="text-center">У вас еще не было транзакций</p>
{% endif %}
models.py:
from django.db import models
class IncomeCategory(models.Model):
name = models.CharField(max_length=100)
class ExpenseCategory(models.Model):
name = models.CharField(max_length=100)
class Account(models.Model):
name = models.CharField(max_length=100)
class Transaction(models.Model):
amount = models.PositiveIntegerField()
date = models.DateField()
commentary = models.TextField(blank=True)
class Meta:
abstract = True
class IncomeTransaction(Transaction):
income_category = models.ForeignKey(IncomeCategory, on_delete=models.PROTECT)
account = models.ForeignKey(Account, on_delete=models.PROTECT)
class ExpenseTransaction(Transaction):
account = models.ForeignKey(Account, on_delete=models.PROTECT)
expense_category = models.ForeignKey(ExpenseCategory, on_delete=models.PROTECT)
class InnerTransaction(Transaction):
account_from = models.ForeignKey(Account, on_delete=models.PROTECT, related_name='inner_transaction_from_set')
account_to = models.ForeignKey(Account, on_delete=models.PROTECT, related_name='inner_transaction_to_set')
views.py
def history(request):
url_name = request.resolver_match.url_name
incomeT = IncomeTransaction.objects.order_by("-date")
expenseT = ExpenseTransaction.objects.order_by("-date")
innerT = InnerTransaction.objects.order_by("-date")
transactions = sorted((chain(incomeT, expenseT, innerT)), key=attrgetter('date'))
return render(request, 'core/history.html', {'url_name': url_name, 'incomeT': incomeT, 'expenseT': expenseT, 'innerT': innerT, 'transactions':transactions})
Ответы (1 шт):
Автор решения: Andrey Maslov
→ Ссылка
не использовал jinja, если брать просто шаблоны джанго, то можно просто использовать
{% if el.__class__.__name__ == 'IncomeTransaction' %}
правда такой вариант не будет отрабатывать потомков класса, что является минусом
либо писать кастомный template Tag
