更新用户配置文件字段django

时间:2011-09-25 17:03:12

标签: python django

应该是一个简单的答案,但我无法弄清楚这里有什么问题......

我有一个包含几个简单字段的用户个人资料。我正试图像这样更新它们:

if data['dob'] != None:     
    request.user.profile.dob = data['dob']  

request.user.profile.save()

但这似乎没有任何影响。

P.S。我在我的UserProfile类中使用了一个很好的小技巧,如下所示:

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])

这可能是问题的一部分吗?

2 个答案:

答案 0 :(得分:0)

使用将配置文件绑定到django用户的建议方法可能更容易:

https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

在此期间,删除UserProfile.objects.get_or_create(user = u)末尾的[0],因为该方法只返回单个对象,无论

答案 1 :(得分:0)

考虑一下代码中会发生什么。

如果您的数据中有dob,请致电request.user.profile。这将调用您的属性,该属性向数据库发出请求并获取或创建Profile实例。

接下来,再次致电request.user.profile。猜猜这是做什么的?对数据库进行全新调用,然后再次获取Profile的实例。但当然这是一个新实例,即使它指的是同一个数据库行,因此它不会具有您在上一版本中设置的dob的值。

现在,您可以通过将配置文件存储在本地变量中来解决此问题:

profile = request.user.profile
profile.dob = data['dob']
profile.save()

但说实话,我会用简介属性放弃整个黑客攻击。它会给你带来各种各样的问题。