应该是一个简单的答案,但我无法弄清楚这里有什么问题......
我有一个包含几个简单字段的用户个人资料。我正试图像这样更新它们:
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])
这可能是问题的一部分吗?
答案 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()
但说实话,我会用简介属性放弃整个黑客攻击。它会给你带来各种各样的问题。