使反向OneToOneField在django中返回None

时间:2013-05-02 08:04:43

标签: django django-models

我有一个带有以下型号的django应用程序:

class A(models.Model):
    ...

我添加了一个与A具有OneToOne关系的新模型,如下所示:

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

正如您所看到的,并非A的每个实例都应该与B有关系。但是,当我尝试查询A是否存在相关的B模型时,例如:

instanceOfA.b

我明白了:

DoesNotExist: B matching query does not exist.

有没有办法让这个查询返回None而不向我的A模型添加属性。我知道this almost identical question但遗憾的是它没有被接受的答案,而现有的答案建议修改A.

我目前正在使用:

 if hasattr(instanceOfA, b):
        ...

但感觉不太干净。

1 个答案:

答案 0 :(得分: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

涵盖的