Почему проверка объекта проходит через это условие if, а затем выдает ошибку AttributeError, потому что он не существует?

У меня есть модели, которые выглядят следующим образом:

class Agent(models.Model):
    pass  # there's obviously more to this but for the sake of this question...

class Deal(models.Model):
    agent = models.ForeignKey(
        Agent, on_delete=models.SET_NULL, null=True, blank=True
    )

Внутри метода save метода Deal у меня есть код, который обновляет метрики Agent, который выглядит следующим образом:

class Deal(models.Model):
    agent = models.ForeignKey(
        Agent, on_delete=models.SET_NULL, null=True, blank=True
    )

    #  ... other code ...

    def save(self, *args, **kwargs):
        if (self.agent):
            try:
                self.agent.closing_success_rate = self.get_agent_closing_success_rate()
            except Exception as e:
                print(e)

Когда нет Agent, подключенного к сделке, я получаю ошибку:

" У объекта 'NoneType' нет атрибута 'closing_success_rate'"

Как условие if, которое проверяет, существует ли Agent, проходит только для того, чтобы потом выдать ошибку, потому что оно не существует?

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