我有一个带有以下型号的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):
...
但感觉不太干净。
答案 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
涵盖的