Dirty Penguin
Dirty Penguin

Reputation: 4412

Cannot save a OneToOneField for a User

I have a User object that has an additional attribute defined by UserExtra model:

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

My user:

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

I would like to add a favourite_cake attribute to this user. I tried doing this:

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

However, if I immediately reload the user, the attribute is not set:

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

I tried to manually save the field, but this raised a user_id is not unique error:

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

What is the correct way to save favourite_cake for User?

Upvotes: 0

Views: 46

Answers (1)

zymud
zymud

Reputation: 2249

I don`t know what is wrong with last example, but in first you need to save user_extra:

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

and then try to reload user.

Upvotes: 2

Related Questions