因此,您至少有两种检查方法。首先是创建try / catch块以获取属性,其次是使用
hasattr。
class A(models.Model): def get_B(self): try: return self.b except: return Noneclass B(models.Model): ref_a = models.oneToOneField(related_name='ref_b', null=True)
请尝试避免裸露的
except:条款。它可以隐藏一些问题。
第二种方法是:
class A(models.Model): def get_B(self): if(hasattr(self, 'b')):return self.b return Noneclass 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.get_b) # No exception raisedprint(a2.get_b) # returns b2print(b1.a) # returns Noneprint(b2.a) # returns a2
没有其他方法,因为抛出异常是Django一对一关系的默认行为。
这是官方文档中处理它的示例。
>>> from django.core.exceptions import ObjectDoesNotExist>>> try:>>> p2.restaurant>>> except ObjectDoesNotExist:>>> print("There is no restaurant here.")There is no restaurant here.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)