更新Django用户个人资料字段
这应该是个简单的问题,但我就是搞不清楚哪里出错了……
我有一个用户资料,里面有几个简单的字段。我想这样更新它们:
if data['dob'] != None:
request.user.profile.dob = data['dob']
request.user.profile.save()
不过,这似乎一点效果都没有。
顺便说一下,我在我的UserProfile类里用了一些小技巧,代码是这样的:
User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0])
这可能是问题的一部分吗?
2 个回答
0
将个人资料与Django用户关联的方法可能会更简单:
https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
同时,记得把UserProfile.objects.get_or_create(user=u)末尾的[0]去掉,因为这个方法无论如何只会返回一个对象。
0
想想你的代码在做什么。
如果你的数据里有一个 dob
(出生日期),你就会调用 request.user.profile
。这时候,它会去数据库里查找或者创建一个用户的个人资料实例。
接下来,你又调用一次 request.user.profile
。你猜这会发生什么?它又会去数据库里查一次,重新获取一个个人资料实例。虽然这个实例指向的是同一行数据,但它是一个全新的实例,所以你之前设置的 dob
值不会被保留。
你可以通过把个人资料存储在一个本地变量里来解决这个问题:
profile = request.user.profile
profile.dob = data['dob']
profile.save()
不过说实话,我建议你不要再折腾这个个人资料属性了。这样做会给你带来各种各样的问题。