Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django.db.models.fields.related_描述符。relatedObjectsDoesNotExist:_Python_Django - Fatal编程技术网

Python django.db.models.fields.related_描述符。relatedObjectsDoesNotExist:

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

如果在字段中指定了相关的_名称,并且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.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)