首页 > 解决方案 > OneToOneField Django的反向关系?

问题描述

我正在使用用户模型

 from django.contrib.auth.models import User

UserProfile 模型扩展了 User 模型

class UserProfile(models.Model):
    user   = models.OneToOneField(User, related_name='userprofiles')
    avatar = models.FileField('img',upload_to='./static/image/')

我需要获取用户的头像,我正在做类似的事情

user = User.objects.get(pk=1)

user.userprofiles

但这给我带来了错误

RelatedObjectDoesNotExist:用户没有用户配置文件。

痕迹:

In [5]: user = User.objects.get(pk=1)

In [6]: user.userprofiles
---------------------------------------------------------------------------
RelatedObjectDoesNotExist                 Traceback (most recent call last)
<ipython-input-6-2253b19e792d> in <module>()
----> 1 user.userprofiles

C:\Program Files\Anaconda3\lib\site-packages\django\db\models\fields\related_des
criptors.py in __get__(self, instance, cls)
    405                 "%s has no %s." % (
    406                     instance.__class__.__name__,
--> 407                     self.related.get_accessor_name()
    408                 )
    409             )

RelatedObjectDoesNotExist: User has no userprofiles.

标签: pythondjango

解决方案


您在以下内容中有错字:

 user   = models.OneToOneField(User, related_name='userprofiles')
 # userprofiles with 's'

user.userprofile然而,您试图在没有 s 的情况下访问它

要么删除srelated_name='userprofiles'要么添加s: --> user.userprofiles以访问Userprofile.


推荐阅读