How to check object relation is populated without catching DoesNotExist
我在模型上定义了一对一的关系。让我们称之为父模型A,相关的模型B.B并不总是存在的。当我与A的一个实例进行交互时,我如何确定B是否存在而不必抓住实干主义者?当我试图访问B的一个实例(例如
我头脑中的简化模型定义(未在此表单中测试):
1 2 3 4 5 6 7 8 9 10 | 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有一个u id的外键。
我提出这个问题的原因是为了确定是否有一种更干净的方法通过API来实现这一点,而不是捕获一个异常。
如果我理解正确,首先使用属性"相关名称"从反向的外键对象引用当前对象,因此模型定义应该如下所示:
1 2 3 4 5 6 | class A: ... class B: a = models.OneToOneField(A, related_name='alias_for_b') name = models.TextField(...) |
验证代码可以简单:
1 2 | if hasattr(a, 'alias_for_b'): print(a.b) or print(a.alias_for_b) |
希望这有帮助!!
假设你有你的
1 2 3 4 | try: print(a.b) except: print('Nothing to see here') |
在试图呈现之前,它检查了
或者,您可以从另一个方向来处理这个问题。以