更新Django用户个人资料字段

0 投票
2 回答
1984 浏览
提问于 2025-04-17 03:03

这应该是个简单的问题,但我就是搞不清楚哪里出错了……

我有一个用户资料,里面有几个简单的字段。我想这样更新它们:

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()

不过说实话,我建议你不要再折腾这个个人资料属性了。这样做会给你带来各种各样的问题。

撰写回答