【发布时间】:2014-11-14 16:49:05
【问题描述】:
现在我使用的是 django 1.6
我有两个模型与OneToOneField 相关。
class A(models.Model):
pass
class B(models.Model):
ref_a = models.OneToOneField(related_name='ref_b', null=True)
首先看我指出问题的代码:
a1 = A.objects.create()
a2 = A.objects.create()
b1 = B.objects.create()
b2 = B.objects.create(ref_a=a2)
# then I call:
print(a1.ref_b) # DoesNotExist Exception raised
print(a2.ref_b) # returns b2
print(b1.ref_a) # returns None
print(b2.ref_a) # returns a2
现在的问题是,如果我要检查一个A 对象,判断它是否存在引用它的B 对象。我该怎么办?
我尝试的有效方法只是尝试捕获异常,但是还有其他更漂亮的方法吗?
我的努力:
1 - 下面的代码有效,但是太丑了!
b = None
try:
b = a.ref_b
except:
pass
2 - 我也尝试检查 a 中的属性,但不起作用:
b = a.ref_b if hasattr(a, 'ref_b') else None
朋友们,你们也遇到同样的问题吗?请指点一下,谢谢!
【问题讨论】:
-
我认为这对你有用,请记住至少在 2 后更改你的班级名称。 b = hasattr(a_class_object, 'b class') 和 a.ref_b 或无。我正在使用相同的产品并为我工作。
-
@Yogesh 我不太明白,能否请您发布更详细的解决方案?
-
hasattr在 Django 1.8.17 和 Python 2 上似乎可以正常工作。
标签: python django model one-to-one