2014-11-21 12 views
11

Nie widzę, aby to zadziałało ...Django RelatedObjectDoesNotExist błąd

Mam metodę has_related_object w moim modelu, który musi sprawdzić, czy obiekt istnieje powiązany ...

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") 

Błąd

RelatedObjectDoesNotExist Firma nie ma klientów.

muszę sprawdzić, czy istnieją te obiekty, ale związane z wnętrza metody obiektu biznesowego

+0

Jakie jest twoje pytanie? Dzięki. – alecxe

+0

Muszę sprawdzić, czy te powiązane obiekty istnieją, ale z poziomu obiektu biznesowego metody – Prometheus

Odpowiedz

12

Ty zatrzymując except Business.DoesNotExist ale to nie jest wyjątek, który jest wyrzucane. Na this SO answer zamiast tego chcesz uchwycić ogólny wyjątek DoesNotExist.

EDYCJA: patrz komentarz poniżej: rzeczywiste wyjątki są przechwytywane przez DoesNotExist, ponieważ dziedziczą po DoesNotExist. Lepiej złapać pułapkę niż prawdziwy wyjątek zamiast tłumić wyjątki od zaangażowanych modeli.

+1

Dla rekordu, podniesionymi wyjątkami są 'Customer.DoesNotExist' w pierwszym przypadku i' Car.DoesNotExist' w drugim. –

+0

Czy istnieje funkcja zwracająca wartość logiczną, którą można wywołać zamiast przechwycić błąd? jak '' 'model.DoesExists (other_model)' '' – Jeremy

+2

właśnie zdałem sobie sprawę, że mogę nazwać hasattr na nim ... więc nevermind – Jeremy

Powiązane problemy