具有 UUI PK 的自定义用户模型无法登录到 Django 3.0、PostgreSQL 中的管理站点
Custom User Model with UUI PK cant login to admin site in 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
的 table。在我的例子中,django_admin_log
table 与 users
table 有一个外键关系。外键列和引用列的类型不同,这是导致问题的原因。
外键列为 INTEGER
,引用列为 UUID
。
使用以下命令删除并重新创建 django_admin_log
对我有用。
drop table django_admin_log
py manage.py migrate admin zero --fake
py manage.py migrate
我的客户用户模型如下所示:
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
的 table。在我的例子中,django_admin_log
table 与 users
table 有一个外键关系。外键列和引用列的类型不同,这是导致问题的原因。
外键列为 INTEGER
,引用列为 UUID
。
使用以下命令删除并重新创建 django_admin_log
对我有用。
drop table django_admin_log
py manage.py migrate admin zero --fake
py manage.py migrate