使反向OneToOneField在django中返回None

kir*_*chi 5 django django-models

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

class A(models.Model):
    ...
Run Code Online (Sandbox Code Playgroud)

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

class B(models.Model):
    a = models.OneToOneField(A)
Run Code Online (Sandbox Code Playgroud)

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

instanceOfA.b
Run Code Online (Sandbox Code Playgroud)

我明白了:

DoesNotExist: B matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

有没有办法让我可以在None不向A模型添加属性的情况下返回此查询.我知道这个几乎完全相同的问题,但遗憾的是它没有被接受的答案,现有的答案建议修改A.

我目前正在使用:

 if hasattr(instanceOfA, b):
        ...
Run Code Online (Sandbox Code Playgroud)

但它感觉不是很干净.

Hed*_*ide 5

你可以在 A 上设置一个方法,例如

class A(object):
   # default stuff

   def get_b(self):
       return getattr(self, 'b', None)
Run Code Online (Sandbox Code Playgroud)

或者更明确

class A(object):
    def get_b(self):
        try:
            return self.b
        except Foobar.DoesNotExist:
            return None
Run Code Online (Sandbox Code Playgroud)

此处包含 Django 功能票证