我尝试在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(我假设)。
答案 0 :(得分:3)
您应该使用user
访问user.userprofile
的用户个人资料,而不是user.UserProfile
。尝试浏览。它应该让Django希望你如何使用这种关系更清楚。
另请注意,从UserProfile
方面,您可以User
而不是 .user
访问.User
。您将看到这是命名约定总是与Django中的关系一起使用。同样,默认情况下,数据库中的表的名称类似于myapp_userprofile
,而不是myapp_UserProfile
。
答案 1 :(得分:0)
使用models.OneToOneField(User,related_name='userprofile')
并添加AUTH_PROFILE_MODULE = 'app.UserProfile'
在你的UserProfile
班级