Django RelatedObjectDoesNotExist错误

14

我无法看到如何使其工作...

我的模型中有一个名为has_related_object的方法,需要检查是否存在相关对象...

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


  def has_related_object(self):
    has_customer = False
    has_car = False

    try:
        has_customer = (self.customer is not None)
    except Business.DoesNotExist:
        pass

    try:
        has_car = (self.car.park is not None)
    except Business.DoesNotExist:
        pass

    return has_customer and has_car



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

错误

RelatedObjectDoesNotExist Business has no customer.

我需要检查这些相关对象是否存在,但是要从业务对象方法内部进行。


你有什么问题吗?谢谢。 - alecxe
我需要在业务对象方法内部检查这些相关的对象是否存在。 - Prometheus
1个回答

16

你现在捕获的是Business.DoesNotExist,但是实际上抛出的不是这个异常。根据此SO答案,您应该捕获通用的DoesNotExist异常。

编辑:见下面的评论:实际上被捕获的异常是继承自DoesNotExist。最好捕获真正的异常,而不是压制所有涉及模型中的DoesNotExist异常。


1
记录一下,第一个情况引发的异常是 Customer.DoesNotExist,第二个情况引发的异常是 Car.DoesNotExist - bruno desthuilliers
有没有一个可以调用而不是捕获错误的返回布尔值的函数?例如model.DoesExists(other_model) - Jeremy
4
刚刚意识到我可以对它使用 hasattr... 所以不用管了。 - Jeremy
@JeremyCraigMartinez 噢,是的,我的问题通过简单调用hasattr得到了解决,谢谢! - Adiyat Mubarak
@ИскренСтаниславов - 你是什么样的测试,发生了什么事情? - Tom
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接