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: у бизнеса нет клиента.
Ответы
Ответ 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