5

我有一个具有以下模型的 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 模型添加属性。我知道这个几乎相同的问题,但遗憾的是它没有被接受的答案,现有的建议修改 A.

我目前正在使用:

 if hasattr(instanceOfA, b):
        ...

但是感觉不是很干净。

4

1 回答 1

5

您可以在 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 功能票涵盖了这一点

于 2013-05-02T08:36:39.553 回答