Фильтрация определенных запросов в Django ORM

У меня возникают трудности с запросом определенных данных путем их фильтрации и последующего отображения в моем шаблоне. Я пытаюсь отобразить в своем шаблоне каждый филиал_cc из данного набора данных, который я уже загрузил, сколько кредитов было выдано для каждого филиала_cc с датой финансирования в 2021 году и общую сумму всех этих кредитов для каждого филиала_cc.

models.py

from django.db import models


class Loan(models.Model):
    funded_date = models.DateTimeField(auto_now_add=False, blank=True)
    respa_date = models.DateTimeField(auto_now_add=False, blank=True)
    loan_amount = models.FloatField(null=True, blank=True, default=None)
    branch_cc = models.IntegerField(default=0, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


views.py

from django.shortcuts import render
from .models import Loan
import datetime
from django.db.models import Sum


def index(request):
    # Funded Dates
    all_loans = Loan.objects.all()
    filter = Loan.objects.filter(funded_date__year=2021).count()

    context = {
        'all_loans': all_loans,
        'filter': filter,


    }

    return render(request, 'index.html', context)

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css"
        integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>

        2021 Funded Date Loans




    </h1>


    <table class="table">
        <thead>
            <tr>

                <th scope="col">Branch CC</th>
                <th scope="col">Count</th>
                <th scope="col">Amount</th>

            </tr>
        </thead>
        <tbody>


            {% for loan in all_loans %}

            <tr>
                <th scope="row">
                    {{loan.branch_cc}} <br>
                </th>



                {%endfor%}


            </tr>

            {% for count in filter %}
            <tr>
                <th scope="row">
                    {{count}}
                </th>
                {% endfor %}


            </tr>

        </tbody>
    </table>



    


</body>

</html>

Вы можете использовать группировку по запросу. Например:

#view
from django.db.models import Sum, Count

branch_cc_with_loans = Loan.objects.filter(funded_date__year=2021).values('branch_cc').annotate(total=Sum('loan_amount'), loan_count=Count('id'))

context = {
        'all_loans': all_loans,
        'filter': filter,
        'branch_cc_with_loans': branch_cc_with_loans 
    }


# template

{% for key, value in branch_cc_with_loans.items() %}
<thead>
<tr><th>{{key}}</th></tr>
</thead>
<tbody>
<tr>{{value}}</tr>
</tbody>

{% endfor %}

Здесь я группирую по branch_cc и аннотирую сумму loan_amount и количество id в кверисете значений. Затем я отправляю его в шаблон через контекст для рендеринга. Для получения дополнительной информации, пожалуйста, обратитесь к документации.

Вернуться на верх