在Django 1.5中扩展User时手动设置user_id?

时间:2013-09-28 10:13:41

标签: django django-models django-authentication

我使用其他字段扩展了auth User模型。

class ExtendedUser(models.Model):
    user = models.OneToOneField(User)
    .... #other fields#

我按照以下方式创建它们。

base_user = User(username =  'username', password = 'password', email = 'user@mail.com')
extended_user = ExtendedUser(user = base_user, ...#other fields#)

在这种情况下,user_id未设置。如果我尝试将base_user保存到数据库,则会发生错误。

extended_user.save()
#Exception traceback
... user_id may not be NULL

困扰我的是我以下解决了这个问题:

extended_user.user_id = extended_user.user.id

这是为我的自定义OneToOne关系自动完成的。我错过了User或者这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

您需要首先保存base_user才能拥有pk(由数据库生成)。

base_user = User(username =  'username', password = 'password', email = 'user@mail.com')
assert base_user.pk is None  # Of course that's not required, just here to prove the point.
base_user.save()
extended_user = ExtendedUser(user = base_user, ...#other fields#)

但更好,

base_user = User.objects.create(username= 'username', password='password', email='user@mail.com')
extended_user = ExtendedUser.objects.create(user=base_user, #...)