【发布时间】:2014-11-28 14:51:09
【问题描述】:
我在模型上定义了一对一的关系。我们称父模型 A 和相关模型 B。B 不会一直存在。当我与 A 的实例交互时,如何确定 B 是否存在而无需捕获 DoesNotExist?当我尝试访问 B 的实例(例如print a.b)时,我收到了一个 DoesNotExist 异常。当有对应于它的关系的数据库行时。这是在 django 1.5 上。
我想到的简化模型定义(未在此表单中测试):
class A:
...
class B:
a = models.OneToOneField(A, related_name='a')
name = models.TextField(...)
fields = ['b__name']
a = A.object.filter(pk=id).selected_related(*fields)
print(a.b)
表 B 有一个外键 a_id。
我提出这个问题的原因是确定是否有更简洁的方法可以通过 API 执行此操作,而不是捕获异常。
【问题讨论】:
-
你能展示你的模型定义吗?
-
你为什么不想抓住 B.DoesNotExist?这是非常标准的异常处理。
-
您的 ForeignKey 字段是否允许空值?
-
我的外键允许空值,正确。
-
"这是非常标准的异常处理。"这是导致丑陋代码的糟糕 API。异常捕获就是这样,一个例外情况。如果没有 API 来检查关系是否存在,那很好,只是希望有人确认。
标签: django