Форматирование выходной таблицы в шаблоне из 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,
    )

По сути, это две таблицы. В одной хранятся названия банков, в другой - обмен валют и их курсы.

Если я выведу данные из модели как есть, то получу следующую картину: output

Если бы я поместил его в html-таблицу, он выглядел бы следующим образом.

enter image description here

Обратите внимание, что каждый курс обмена валюты занимает одну строку (datetime, currency, rate, bank). И я хочу, чтобы каждый банк имел все свои курсы валют в одной строке, как на рисунке ниже.

desired result

Интересно, как я могу это сделать? Нужно ли мне выполнить какую-то операцию объединения или написать код в шаблоне, чтобы отформатировать его таким образом.

Вид класса:

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 %}
Вернуться на верх