django - 带有 UUI PK 的客户用户模型无法登录到 Django 3.0、PostgreSQL 中的管理站点
问题描述
我的客户用户模型如下所示:
class User(AbstractBaseUser):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
email = models.EmailField(unique=True)
is_staff = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return self.is_admin
def __str__(self):
return self.email
class Meta:
db_table = 'login'
当我在执行 manage.py createsuperuser 后尝试登录管理员时,会引发以下错误:
ProgrammingError at /admin/
operator does not exist: integer = uuid
LINE 1: ...NER JOIN "login" ON ("django_admin_log"."user_id" = "login"....
我知道这与 PostgreSQL 的强类型和 Django 不想假设传入字段类型有关。我想解决这个问题,因为那里的许多客户用户教程都指定了 UUID 类型的主键,并且当这些步骤要求您登录到管理员并对其进行测试时,似乎没有遇到这个问题。
解决方案
我遇到了同样的问题。我的数据库中有一个名为的表users
。就我而言,django_admin_log
表与表有外键关系users
。外键列和引用列的类型不同,这导致了问题。
外键列是INTEGER
,引用列是UUID
。使用以下命令删除和重新创建django_admin_log
对我有用。
drop table django_admin_log
py manage.py migrate admin zero --fake
py manage.py migrate
推荐阅读
- javascript - 使用 vee-validate 离开页面前提示
- swift - Swift 顺序执行函数
- javascript - 节点进程不以猫鼬索引退出
- php - 无法使用 apache 从根 Centos 7 引用的 php 中的 scandir()
- javascript - Node.js 异步/等待模块导出
- oracle - 将 nls 日期格式传递给 SQL Loader 控制文件
- google-chrome - chrome 的 200 和 200 OK 有什么区别?
- meteor - 流星银河“部署失败”
- java - Twitter4j:Oauth 不起作用
- c# - 删除行并将行添加到 DataGridView 时创建的重复行