Подтвердить что ты не робот

Django проверить, существует ли связанный объект с ошибкой: RelatedObjectDoesNotExist

У меня есть метод has_related_object в моей модели, который должен проверить, существует ли связанный объект

class Business(base):
      name =  models.CharField(max_length=100, blank=True, null=True)

  def has_related_object(self):
        return (self.customers is not None) and (self.car is not None)


class Customer(base):
      name =  models.CharField(max_length=100, blank=True, null=True)
      person = models.OneToOneField('Business', related_name="customer")

Но я получаю ошибку:

Business.has_related_object()

RelatedObjectDoesNotExist: у бизнеса нет клиента.

4b9b3361

Ответ 1

Это потому, что ORM должен перейти в базу данных, чтобы проверить, существует ли customer. Так как он не существует, он вызывает исключение.

Вам придется изменить свой метод на следующий:

def has_related_object(self):
    has_customer = False
    try:
        has_customer = (self.customers is not None)
    except Customer.DoesNotExist:
        pass
    return has_customer and (self.car is not None)

Я не знаю ситуацию с self.car, поэтому я оставлю это на ваше усмотрение, чтобы настроить его, если это необходимо.

Примечание: Если вы делали это на Model, на котором есть ForeignKeyField или OneToOneField, вы можете сделать следующее в качестве ярлыка, чтобы избежать запроса к базе данных.

def has_business(self):
    return self.business_id is not None

Ответ 2

Используйте hasattr(self, 'customers'), чтобы избежать проверки исключений, как рекомендуется в Django docs:

def has_related_object(self):
    return hasattr(self, 'customers') and self.car is not None