Can';t在Django 1.5中使用自定义用户模型创建超级用户

Can';t在Django 1.5中使用自定义用户模型创建超级用户,django,django-models,foreign-keys,Django,Django Models,Foreign Keys,我的目标是在Django 1.5中创建一个自定义用户模型 #myapp.models.py 从django.contrib.auth.models导入AbstractBaseUser 类MyUser(AbstractBaseUser): email=models.EmailField( 详细的名称=“电子邮件地址”, 最大长度=255, 唯一=正确, db_index=True, ) first_name=models.CharField(最大长度=30,空白=True) last_name=m


我的目标是在Django 1.5中创建一个自定义用户模型

#myapp.models.py
从django.contrib.auth.models导入AbstractBaseUser
类MyUser(AbstractBaseUser):
email=models.EmailField(
详细的名称=“电子邮件地址”,
最大长度=255,
唯一=正确,
db_index=True,
)
first_name=models.CharField(最大长度=30,空白=True)
last_name=models.CharField(最大长度=30,空白=True)
公司=型号。外键(“公司”)
...
用户名\字段='电子邮件'
必填_字段=[“公司”]
由于公司字段(models.ForeignKey('company')(python manage.py createsuperuser),我无法创建超级用户。 我的问题:
如果没有公司,我如何为我的应用程序创建超级用户。 我尝试创建自定义MyUserManager,但没有成功:

类MyUserManager(BaseUserManager):
...
def create_超级用户(自我、电子邮件、公司=无、密码):
"""
使用给定的电子邮件和密码创建并保存超级用户。
"""
user=self.create\u用户(
电子邮件,
密码=密码,
)
user.save(使用=self.\u db)
返回用户
还是我必须为这个用户创建一个假公司?
谢谢你

在这种情况下,你有三种方法

1) 不需要与公司建立关系
company=models.ForeignKey('company',null=True)

2) 添加默认公司并将其作为默认值提供给外键字段
company=models.ForeignKey('company',default=1)
#其中1是所创建公司的id

3) 保持模型代码不变。为名为“Superusercompany”的超级用户添加假公司 在create_superuser方法中设置它


UPD:根据您的评论方式#3将是不破坏您的业务逻辑的最佳解决方案。

感谢您的反馈,以下是我提出的解决方案: 我在其中创建默认公司的自定义MyUserManager

def create_superuser(自我、电子邮件、密码、公司=无):
"""
使用给定的电子邮件和密码创建并保存超级用户。
"""
如果不是公司:
公司(
name=“…”,
地址=“…”,
code=“…”,
城市“…”
)
company.save()
user=self.create\u用户(
电子邮件,
密码=密码,
公司
)
user.is_admin=True
user.save(使用=self.\u db)
返回用户

为什么需要公司?在我的模型中,没有公司的用户不可能存在。但是超级用户有一个例外。我在没有必填字段的情况下遇到此错误:IntegrityError:app\u myuser.company\u id不能为空。您可以为所有字段指定默认公司。