无法为用户保存OneToOneField

时间:2014-05-18 16:21:56

标签: django

我有一个User对象,它有一个UserExtra模型定义的附加属性:

class UserExtra(models.Model):
    user = models.OneToOneField(User, related_name='user_extra')
    favourite_cake = models.CharField(max_length=100)

我的用户:

>>> u = User.objects.get(pk=1)
>>> u
<User: rabid_sparrow>

我想为此用户添加favourite_cake属性。我试过这样做:

>>> u.user_extra.favourite_cake = 'black forrest'
>>> u.save()
>>> u.user_extra.favourite_cake 
u'black forrest'

但是,如果我立即重新加载用户,则不会设置该属性:

>>> u = User.objects.get(pk=1)
>>> u.user_extra.favourite_cake
>>> 
>>> type(u.user_extra.favourite_cake)
<type 'NoneType'>

我尝试手动保存字段,但这引发了user_id不是唯一错误:

>>> ue = UserExtra(user=u, favourite_cake='black forrest')
>>> ue.save()
-snip-
IntegrityError: column user_id is not unique

为用户保存favourite_cake的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

我不知道上一个例子有什么问题,但首先你需要保存user_extra:

>>> u.user_extra.favourite_cake = 'black forrest'
>>> u.user_extra.save()

然后尝试重新加载用户。