Присоединение двух таблиц через третью с двумя внешними ключами
У меня есть три таблицы:
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)