0

我用附加字段扩展了 authUser模型。

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或者这是一个错误?

4

1 回答 1

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, #...)
于 2013-09-28T10:28:09.953 回答