我使用其他字段扩展了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
或者这是一个错误吗?
答案 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, #...)