Нужна помощь с написанием запроса к БД на Django

Изначально есть две модели - "Client" и "Creditor".

class Client(models.Model):
first_name = models.CharField('Имя', max_length=100)
second_name = models.CharField('Фамилия', max_length=100)
patronymic = models.CharField('Отчество', max_length=100)
birth_date = models.CharField('Дата рождения', max_length=100)
creditor = models.ManyToManyField('Creditor', through='ClientCreditorThrough')
# должна выводиться сумма долга, подсчитанная как сумма долгов от всех кредиторов

def __str__(self):
    return f'{self.first_name} {self.second_name}'


class Creditor(models.Model):
name = models.CharField('Наименование', max_length=300)
address = models.CharField('Адрес', max_length=400)
taxpayer_number = models.PositiveIntegerField('ИНН')

def __str__(self):
    return self.name

Они связаны между собой через ManyToManyfield. Первой задачей было собрать всех должников конкретного банка и все банки, в которых конкретный должник брал кредиты - с этим проблем не возникло. Но затем в промежуточную таблицу модели ClientCreditorThrough было добавлено поле "debt_sum" - сумма долга.

class ClientCreditorThrough(models.Model):
client = models.ForeignKey(Client, on_delete=models.SET_DEFAULT,
                           default='Нет кредитора')
creditor = models.ForeignKey(Creditor, on_delete=models.DO_NOTHING)

debt_sum = models.PositiveIntegerField()

То есть, теперь в промежуточной таблице есть связь между клиентом, кредитором и суммой долга конкретного клиента перед конкретным кредитором. Проблема в том, что не могу понять, как правильно сформировать во вью-классе запрос, который позволит потом в html-шаблон вывести для конкретного клиента сразу название его кредитора и сумму долга.

Вот имеющийся вью-класс:

class ClientDetailView(DetailView):
model = Client
template_name = 'clients/client_detail.html'
context_object_name = 'client'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        through_object =  ClientCreditorThrough.objects.filter(client_id=self.kwargs['pk'])
        context['through'] = through_object
        # получен QuerySet из промежуточных объектов для конкретного клиента,
        # но имени кредитора в нем нет, а есть только цифра - id. Как его вытащить?
        return context

По идее, нужен запрос, который вернет QuerySet, содержащий наименование кредитора и сумму долга - и их потом можно будет "распаковать" в шаблоне через директиву {% for %}. Но как создать такой QuerySet - никак не соображу. Из объекта модели ClientCreditorThrough можно получить сумму долга, если обратиться к объекту по типу "объект.debt_sum", но невозможно получить название кредитора, т.к. в таблице ClientCreditorThrough зашиты просто цифры-id кредитора, которые отсылают к таблице с самими кредиторами. Нужно до их названий как-то дотянуться. введите сюда описание изображенияПомогите, пожалуйста, с этим (вид промежуточной таблицы - на скрине).

Ну, ты можешь получить имена, если в модели ClientCreditorThrough переопределишь метод str и напишешь:

return f'{self.creditor.name} - {self.client}'
Вернуться на верх