在django中更新以一对一关系获取的对象(或从对象获取QuerySet)

时间:2014-06-19 14:13:47

标签: django

我有一个UserProfile模型,我想更新用户的个人资料点。

class UserProfile(models.Model):
    user = models.OneToOneField(User, related_name='profile')
    points = DecimalField(default=0)

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

我尝试了User.objects.get(username='Joe').profile.update(points=100),但由于User.objects.get(username='Joe').profile不是QuerySet,因此无效。

如何更新个人资料?或者如何从QuerySet中获取User.objects.get(username='Joe').profile个实例?

1 个答案:

答案 0 :(得分:3)

User.objects.get(username =' Joe')。profile实际上返回一个UserProfile对象。由于UserProfile对象不是查询集,因此它没有update()方法。

您可以这样做:

try:
    userProfile = User.objects.get(username='Joe').profile
    userProfile.points = 100
    userProfile.save()
except UserProfile.DoesNotExist:
    pass

或使用查询集进行更新,其中用户的用户名等于' Joe'

UserProfile.objects.filter(user__username='Joe').update(points=100)