You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中使用createsuperuser时如何实例化Sector模型?

解决方法

问题出在你的MyUserManager类中,create_user方法直接将输入的字符串sectorCode赋值给了Employee.sectorCode外键字段,但外键字段要求的是Sector模型实例,而不是主键字符串。

你需要修改MyUserManager的create_user方法,先通过传入的sectorCode值查询对应的Sector对象,再赋值给用户的外键字段:

class MyUserManager(BaseUserManager):
    
    def create_user(self, registrationNumber, firstName, name, sectorCode, password=None):
        if not firstName: raise ValueError("firstName required")
        if not name: raise ValueError("name required")
        if not registrationNumber: raise ValueError("registrationNumber required")
        if not sectorCode: raise ValueError("sectorCode required")
        
        # 新增:通过sectorCode查询对应的Sector实例
        try:
            sector = Sector.objects.get(sectorCode=sectorCode)
        except Sector.DoesNotExist:
            raise ValueError(f"Sector with code {sectorCode} does not exist")
        
        # 将sector实例赋值给sectorCode字段
        user=self.model(firstName = firstName, name = name, registrationNumber = registrationNumber, sectorCode = sector)
        user.set_password(password); user.save()
        return user
    
    def create_superuser(self, firstName, name, registrationNumber, sectorCode, password=None):
        user=self.create_user(firstName = firstName, name = name, registrationNumber = registrationNumber, sectorCode = sectorCode, password = password)
        user.is_admin=True; user.is_superuser=True
        user.save()
        return user

修改后,重新运行python manage.py createsuperuser命令,输入Code1作为sectorCode时,系统会自动查询对应的Sector实例,就能正常创建超级用户了。

另外,如果你只是临时需要创建超级用户,也可以通过Django Shell手动创建:

  1. 运行python manage.py shell
  2. 执行以下代码:
from myapp.models import Sector, Employee

# 获取已有的Sector实例
sector = Sector.objects.get(sectorCode="Code1")
# 创建超级用户
Employee.objects.create_superuser(registrationNumber="001", firstName="TestFN1", name="TestN1", sectorCode=sector, password="你的密码")

内容的提问来源于stack exchange,提问作者problème0123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:30:51