如何在我的自定义用户模块中避免此“'tuple' 对象没有属性 'photo'”错误?

Posted

技术标签:

【中文标题】如何在我的自定义用户模块中避免此“\'tuple\' 对象没有属性 \'photo\'”错误?【英文标题】:How to avoid this "'tuple' object has no attribute 'photo'" error in my custom User module?如何在我的自定义用户模块中避免此“'tuple' 对象没有属性 'photo'”错误? 【发布时间】:2014-02-16 20:07:03 【问题描述】:

我正在尝试存储有关 使用 facebook 登录到我的网站的用户,所以我创建了一个 UserProfile 模型。

这就是我定义 UserProfile 的方式:

models.py

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

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    photo = models.TextField()

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

    post_save.connect(create_user_profile, sender=User)

settings.py

AUTH_PROFILE_MODULE = 'blog.UserProfile'

而且,由于我使用 python-social-auth 进行身份验证,因此我正在实施 用于将用户的图像 url 存储在 UserProfile 中的自定义管道。

from blog.models import UserProfile

def get_profile_picture(
    strategy,
    user,
    response,
    details,
    is_new=False,
    *args,
    **kwargs
    ):
    img_url = 'http://graph.facebook.com/%s/picture?type=large' \
        % response['id']
    profile = UserProfile.objects.get_or_create(user = user)
    profile.photo = img_url
    profile.save()

但我收到以下错误: “元组”对象没有属性“照片”

我知道 UserProfile 具有“照片”属性,因为 这是该表的定义:

table|blog_userprofile|blog_userprofile|122|CREATE TABLE "blog_userprofile" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL UNIQUE REFERENCES "auth_user" ("id"),
    "photo" text NOT NULL
)

那我的代码有什么问题?

【问题讨论】:

你确定 UserProfile.objects.get_or_create() 返回一个 UserProfile 对象吗? 【参考方案1】:

如错误所述,您的 profile 变量是一个元组,而不是 UserProfile 实例。那是因为get_or_create 返回一个 (instance, created) 的元组。

【讨论】:

谢谢,这有效:profile = UserProfile.objects.get_or_create(user = user)[0]

以上是关于如何在我的自定义用户模块中避免此“'tuple' 对象没有属性 'photo'”错误?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 视图模块卡在我的自定义主题上

Sencha Touch - 为啥在我的自定义组件中未定义此功能?

如何使用验证“唯一”访问 Laravel 中的自定义文本框名称?

为啥具有“用户”范围级别的自定义维度未显示在我的报告中?

Sonata Admin的自定义Flash消息

如何等待创建/编辑实体模式窗口完成渲染并在 2sxc 模块中执行我的自定义 js 代码?