我正在尝试在django中扩展默认用户模型。
我已经定义了一个名为Profile的类。
# code in myapp/models/profile.py
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User)
field = models.CharField(max_length=30)
class Meta:
app_label="myapp"
在我的视图函数中,我调用了一个获得异常的方法:
def my_view_function(request):
field = get_field(request.user)
...
def get_field(user):
return user.profile.field
# also tried return user.get_profile().field with AUTH_PROFILE_MODULE in settings.py set to "myapp.Profile", still does not work.
我在stacktrace 'unicode' object has no attribute 'get_profile'
中得到一个AttributeError
或'unicode' object has no attribute 'profile'
。
当我尝试将get_field()中的用户对象与字符串连接时,我收到错误'str' cannot concatenate with 'SimpleLazyObject'
。
我试过阅读request.user returns a SimpleLazyObject, how do I "wake" it?,但这没有帮助。
我正在使用中间件来确保用户已登录,因此我确信用户已登录。用户对象有什么问题?为什么django说用户对象有'__unicode__'
类型。
提前致谢!
答案 0 :(得分:3)
假设您AUTH_PROFILE_MODULE = 'yourapp.Profile'
中有settings.py
,您应该可以调用User
对象上的get_profile()
方法获取Profile
模型(例如,request.user.get_profile()
)。
要获取实际字段,您需要致电request.user.get_profile().field
。
您应该注意,自django 1.5起,用户个人资料已弃用custom user models。
答案 1 :(得分:0)
修正了它。我仔细查看了堆栈跟踪,发现我正在将字段值传递给另一个期望用户对象的函数。这导致了令人困惑的__unicode__
错误。