Присоединение двух таблиц через третью с двумя внешними ключами

У меня есть три таблицы:

class Bank(models.Model):
    ...

class Deposit(models.Model):
    ...

class DepositProposal(models.Model):
    percent = models.FloatField()
    deposit = models.ForeignKey(Deposit)
    bank = models.ForeignKey(Bank)

Банк может участвовать в депозитном аукционе, применяя экземпляр DepositProposal. Как я могу отфильтровать строки депозитов, в которых банк еще не участвовал? Нашел, что нужно использовать два LEFT JOIN, но не сталкивался с этим. Использую PosgtreSQL.

Если вы хотите узнать вклады, в которых банк не участвует:

1- Добавить связанное_имя к депозиту и банку:

class DepositProposal(models.Model):
    percent = models.FloatField()
    deposit = models.ForeignKey(Deposit, related_name = "proposals")
    bank = models.ForeignKey(Bank, related_name = "proposals")

2- Получите банк, который вы хотите проверить:

bank = Bank.objects.first() #For example, the first bank

3- Получить набор запросов:

deposits = Deposit.objects.exclude(proposals__bank = bank)

РЕДАКТИРОВАНИЕ:

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

deposit = Deposit.objects.first() #For example, the first deposit
banks = Bank.objects.exclude(proposals__deposit = deposit)
Вернуться на верх