2013-05-02 82 views
4

返回無我有以下模型一個Django應用程序:製作反向OneToOneField在Django

class A(models.Model): 
    ... 

而且我已經添加的具有被一個OneToOne關係,像這樣的新模式:

class B(models.Model): 
    a = models.OneToOneField(A) 

正如你所看到的,不是A的每個實例都應該有B的關係,但是,當我嘗試查詢用於相關的B型的存在,如:

instanceOfA.b 

我得到:

DoesNotExist: B matching query does not exist. 

有沒有辦法可以讓該查詢返回None不添加屬性到我的模型。我所知道的this almost identical question但遺憾的是它有沒有公認的答案和現有的建議修改A.

我目前使用:

if hasattr(instanceOfA, b): 
     ... 

但它不覺得很乾淨。

+0

的可能重複[Django的:從OneToOneField返回 '無',如果相關的對象不存在?] (http://stackoverflow.com/questions/3955093/django-return-none-from-onetoonefield-if-related-object-doesnt-exist) – 2015-08-21 17:23:43

回答

4

您可以在A上設置方法,例如

class A(object): 
    # default stuff 

    def get_b(self): 
     return getattr(self, 'b', None) 

或者更明確的

class A(object): 
    def get_b(self): 
     try: 
      return self.b 
     except Foobar.DoesNotExist: 
      return None 

這是通過一個Django功能票覆蓋here

+0

哦,不知道該功能的要求。所以現在看起來沒有「乾淨」的方式來做到這一點。感謝您的鏈接。順便說一句,我曾嘗試類似於你的第一個片段,並得到了同樣的例外。現在,首先用hasattr進行測試似乎可以做到這一點,因爲它似乎能夠捕捉到這個異常。 – kirbuchi 2013-05-02 16:00:33