具有 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