Форматирование выходной таблицы в шаблоне из django.model
Я создаю приложение-агрегатор курсов валют. У меня есть следующие модели.
class Bank(models.Model):
bank_name = models.CharField(
max_length=30,
blank=False,
unique=True,
)
class ExchangeRate(models.Model):
USD_in = 'USD_in'
USD_out = 'USD_out'
EUR_in = 'EUR_in'
EUR_out = 'EUR_out'
RUB_in = 'RUB_in'
RUB_out = 'RUB_out'
USD_EUR_in = 'USD_EUR_in'
USD_EUR_out = 'USD_EUR_out'
exchange_choise = [
(USD_in, 'USD_in'),
(USD_out, 'USD_out'),
(EUR_in, 'EUR_in'),
(EUR_out, 'EUR_out'),
(RUB_in, 'RUB_in'),
(RUB_out, 'RUB_out'),
(USD_EUR_in, 'USD_EUR_in'),
(USD_EUR_out, 'USD_EUR_out'),
]
datetime = models.DateTimeField(
auto_now_add=True,
blank=False,
)
exchange_type = models.CharField(
max_length=12,
choices=exchange_choise,
)
rate = models.FloatField()
bank_id = models.ForeignKey(
Bank,
on_delete=models.CASCADE,
)
quantity = models.IntegerField(
default=1,
)
По сути, это две таблицы. В одной хранятся названия банков, в другой - обмен валют и их курсы.
Если я выведу данные из модели как есть, то получу следующую картину:
Если бы я поместил его в html-таблицу, он выглядел бы следующим образом.
Обратите внимание, что каждый курс обмена валюты занимает одну строку (datetime, currency, rate, bank). И я хочу, чтобы каждый банк имел все свои курсы валют в одной строке, как на рисунке ниже.
Интересно, как я могу это сделать? Нужно ли мне выполнить какую-то операцию объединения или написать код в шаблоне, чтобы отформатировать его таким образом.
Вид класса:
class CurrencyExchangeRateView(ListView):
model = ExchangeRate
template_name = "exchange_rates.html"
def get_queryset(self):
banks = Bank.objects.all()
selected = ExchangeRate.objects.none()
for bank in banks:
exchangeRateBank = ExchangeRate.objects.filter(bank_id=bank)
latest_dt = exchangeRateBank.order_by('datetime').last()
if latest_dt is None:
pass
dt = latest_dt.datetime
new_dt = datetime(
dt.year,
dt.month,
dt.day,
dt.hour + timezone_hours,
dt.minute
)
latest = exchangeRateBank.filter(datetime__gte=new_dt)
selected = selected | latest
return selected
template:
{% for i in object_list %}
<p> {{ i.datetime i.exchange_type i.rate i.bank_name }} </p>
{% endfor %}