1

我正在尝试扩展 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.

我在堆栈跟踪'unicode' object has no attribute 'get_profile''unicode' object has no attribute 'profile'.

当我尝试将 get_field() 中的用户对象与字符串连接时,我收到一条错误消息'str' cannot concatenate with 'SimpleLazyObject'。我尝试阅读request.user 返回一个 SimpleLazyObject,我该如何“唤醒”它?但这并没有帮助。

我正在使用中间件来确保用户已登录,因此我确定用户已登录。用户对象有什么问题?为什么 django 说用户对象有 '__unicode__'类型。

提前致谢!

4

2 回答 2

3

假设你有AUTH_PROFILE_MODULE = 'yourapp.Profile'settings.py应该能够调用对象get_profile()上的方法User来获取Profile模型(例如,request.user.get_profile())。

要获取实际字段,您需要调用request.user.get_profile().field.

您应该注意,从 django 1.5 开始不推荐使用用户配置文件,而支持自定义用户模型

于 2012-12-30T17:41:28.080 回答
0

解决它。我仔细查看了堆栈跟踪,发现我正在将字段值传递给另一个需要用户对象的函数。这导致了令人困惑的__unicode__错误。

于 2012-12-30T19:04:31.187 回答