添加自定义用户模型后无法创建超级用户

1 投票
1 回答
530 浏览
提问于 2025-04-18 05:19

我创建了一个叫 CustomUser 的类,它是从 AbstractUser 这个类扩展出来的,并且我添加了一个外键字段,用来关联 City 模型。

class City(models.Model):
    created_dt = models.DateTimeField("Created Time", auto_now_add=True)
    code = models.CharField(max_length=64, unique=True)
    name = models.CharField(max_length=64)

class CustomUser(AbstractUser):
    city = models.ForeignKey(City)
    REQUIRED_FIELDS = ['city']

我把 CustomUser 加入到了设置里:

AUTH_USER_MODEL = "myapp.CustomUser"

当我尝试同步数据库时,它提示我需要创建一个超级用户。当我填写城市信息时,出现了这个错误:

City: 1
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 116, in handle
    user_data[field_name] = field.clean(raw_value, None)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 255, in clean
    self.validate(value, model_instance)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/db/models/fields/related.py", line 1201, in validate
    using = router.db_for_read(model_instance.__class__, instance=model_instance)
  File "/var/www/uib_webservice/.virt1/local/lib/python2.7/site-packages/django/db/utils.py", line 250, in _route_db
    return hints['instance']._state.db or DEFAULT_DB_ALIAS
AttributeError: 'NoneType' object has no attribute '_state'

有人能告诉我这是为什么吗?我在 Django 方面还是个新手,谢谢。

1 个回答

0

根据文档,你不能把一个必填字段设置为外键。现在有一个问题单,里面讨论的内容和你遇到的情况类似。我建议你可以创建一个新的类,继承CustomUserManager,然后重写里面的create_superuser方法,最后在你的CustomUser模型中使用这个新的对象管理器。

撰写回答