Reputation: 4412
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
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