Python django.db.models.fields.related_描述符。relatedObjectsDoesNotExist:
如果在字段中指定了相关的_名称,并且realted模型没有记录,django在访问相关的_名称时会引发以下错误Python django.db.models.fields.related_描述符。relatedObjectsDoesNotExist:,python,django,Python,Django,如果在字段中指定了相关的_名称,并且realted模型没有记录,django在访问相关的_名称时会引发以下错误 django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: 下面是示例代码: from django.conf import settings User = settings.AUTH_USER_MODEL class Partner(models.Model): user = models
django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist:
下面是示例代码:
from django.conf import settings
User = settings.AUTH_USER_MODEL
class Partner(models.Model):
user = models.OneToOneField(User, related_name = 'partner_user', on_delete=models.CASCADE)
现在在壳牌
from django.contrib.auth.models import *
user1 = User.objects.get(pk=1)
user1.partner_user
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 389, in __get__
self.related.get_accessor_name()
django.db.models.fields.related_descriptors.RelatedObjectDoesNotExist: User has no partner_user
是否有更好的解决方案???使用hasattr看起来还可以。我建议使用条件表达式而不是
和/或技巧:
user1.partner_user if hasattr(user1, 'partner_user') else []
您可以通过使用带有默认值的getattr
来简化它
getattr(user1, 'partner_user', [])
最后,我很惊讶,当相关对象不存在时,您使用的是空列表。我希望看到的是None
getattr(user1, 'partner_user', None)
但是将默认值传递给getattr将简化它getattr(user1,'partner\u user',None)
@AamirAdnan是的,很好的一点,我已经更新了使用getattr(user1,'partner\u user',None)
的答案。非常感谢,我刚刚搞错了。
getattr(user1, 'partner_user', None)