2014-11-21 16 views
11
Ben bu işe gitmek için göremiyorum

... Ben bir ilgili nesne varlığının kontrol edilmesi gerekiyor benim modelinde bir yöntem has_related_object varDjango RelatedObjectDoesNotExist hatası

...

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

Hata

RelatedObjectDoesNotExist Business müşterisi yok.

Ben bu ilgili nesnelerin var ama iş nesnesi yöntemiyle

+0

Sorunuz nedir? Teşekkürler. – alecxe

+0

Bu ilgili nesnelerin var mı, ancak iş nesnesi yöntemi – Prometheus

cevap

12

içinden Sen except Business.DoesNotExist yakalama kontrol edeceğiniz gerek ama bu atılan ediliyor istisna. this SO answer uyarınca, bunun yerine genel DoesNotExist istisnasını yakalamak istersiniz.

DÜZENLEME: bkz: aşağıdaki yorum: gerçek istisnalar DoesNotExist tarafından yakalanmaktadır, çünkü bunlar DoesNotExist'dan devralmıştır. İlgili modellerin hiçbiri ve tüm DoesNotExist istisnalarını bastırmak yerine gerçek istisnayı yakalamaktan daha iyidir.

+1

içinde olup olmadığını denetlemem gerekir. Kayıt için, istisnalar, ilk durumda 'Customer.DoesNotExist' ve ikinci 'Car.DoesNotExist'. –

+0

Hatayı yakalamak yerine arayabileceğim bir boole döndüren bir işlev var mı? '' '' model.DoesExists (other_model) '' ' – Jeremy

+2

sadece bunun üzerine hasattr diyebileceğimi farkettim ... bu yüzden nevermind – Jeremy

İlgili konular