【问题标题】:Manually setting user_id when extending User in Django 1.5?在 Django 1.5 中扩展用户时手动设置 user_id?
【发布时间】:2013-09-28 10:13:41
【问题描述】:

我用附加字段扩展了 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 的内容,或者这是一个错误?

【问题讨论】:

    标签: django django-models django-authentication


    【解决方案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, #...)
    

    【讨论】:

      猜你喜欢
      • 2014-07-06
      • 2012-01-27
      • 2013-05-12
      • 2013-04-18
      • 2015-07-08
      • 2012-03-11
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多