OneToOneField Django的逆向关系?

时间:2018-05-07 13:43:44

标签: python django

我正在使用用户模型

 from django.contrib.auth.models import User

UserProfile模型扩展了用户模型

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:用户没有userprofile。

跟踪:

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.

3 个答案:

答案 0 :(得分:2)

你有以下错误:

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

然而,您尝试使用user.userprofile而不是s

访问它

要么移除s中的related_name='userprofiles',要么继续移动,而是通过添加Userprofile来访问s: - &gt; user.userprofiles

答案 1 :(得分:0)

要从UserProfile对象获取User对象,您需要使用userprofiles

user = User.objects.get(pk=1)
up = user.userprofiles
up.user == user    # will return True

答案 2 :(得分:0)

您在数据库中没有该用户的UserProfile。 RelatedObjectDoesNotExist单独说)