'用户'对象没有属性' UserProfile'

时间:2016-09-05 02:34:14

标签: django

我尝试在https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#extending-the-existing-user-model上关注如何扩展用户模型的示例。但我无法检索附加到用户的模型数据。

模型

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ip = models.IntegerField(default=0)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

获取我的用户对象

user = auth.authenticate(username=username, password=password)
g = user.UserProfile.ip
print(g)

用户获取正确,我能够获得标准用户的所有数据。但user.UserProfile将导致:

Internal Server Error: /Crowd/login/
Traceback (most recent call last):
  File "C:\Anaconda3\Lib\site-packages\django\core\handlers\base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Anaconda3\Lib\site-packages\django\core\handlers\base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Rasmus\workspace\Crowd\src\Cr\views.py", line 35, in login
    g = user.UserProfile.ip
AttributeError: 'User' object has no attribute 'UserProfile'
[05/Sep/2016 04:32:46] "POST /Crowd/login/ HTTP/1.1" 500 69185

我检查了我的数据库,我可以看到UserProfile中有一行与User有关系。所以正在创建UserProfile(我假设)。

2 个答案:

答案 0 :(得分:3)

您应该使用user访问user.userprofile的用户个人资料,而不是user.UserProfile。尝试浏览Error for Gulp。它应该让Django希望你如何使用这种关系更清楚。

另请注意,从UserProfile方面,您可以User 而不是 .user访问.User。您将看到这是命名约定总是与Django中的关系一起使用。同样,默认情况下,数据库中的表的名称类似于myapp_userprofile,而不是myapp_UserProfile

答案 1 :(得分:0)

使用models.OneToOneField(User,related_name='userprofile')
并添加AUTH_PROFILE_MODULE = 'app.UserProfile'
在你的UserProfile班级