Django 管理员。授予用户或组权限并保存时,出现 500 服务器错误

Django Admin. Giving permission to a user or a group and on save, I have 500 server error

更新

短暂 运行 应用程序处于调试模式...保存时它给了我以下信息:

ProgrammingError at /admin/auth/user/4/change/
syntax error at or near "ON"
LINE 1: ...ser_groups" ("user_id", "group_id") VALUES (4, 5) ON CONFLIC...

查了一下相关故障,果然是PostgreSQL从9.2升级到最新版本的问题...


更新

为什么我找不到如何从终端将用户分配到组,为 users/groups 分配默认权限?从逻辑上讲,这将是解决此问题的某种方法……不完美,但至少是某种解决方案?

好吧,我想我可以通过 sql 查询在数据库中完成...


如果我尝试将用户分配给组或将权限分配给组或用户,我会遇到 500 服务器错误错误。

我有以下 models.py,它在: /home/e/sc_project/sc 它是自动生成的,它告诉我数据库中每个 table 的以下消息:

This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models
# Unable to inspect table 'auth_group'
# The error was: syntax error at or near "WITH ORDINALITY"
LINE 6:                     FROM unnest(c.conkey) WITH ORDINALITY co...
                                                  ^
# Unable to inspect table 'auth_group_permissions'
# The error was: syntax error at or near "WITH ORDINALITY"
LINE 6:                     FROM unnest(c.conkey) WITH ORDINALITY co...
                                                  ^

等等... 那是因为我有 9.2 PostgreSQL 数据库(?)...它能给我权限问题吗?如果是这样,有什么解决办法吗?我无法更新到更高版本的 PostgreSQL,因为 c-panel 不支持更高版本,这意味着我只能使用 psql 访问数据,这不如通过 c-panel 好...

系统在本地服务器 (PostgreSQL 12) 上运行良好,但在远程基于 centos 7 的服务器上失败,运行 by nginx+gunicorn。

我是否必须为 gunicorn 打开权限文件夹?我没有看到任何明确的答案。有 gunicorn 本身权限的答案,但没有文件夹权限的答案。到目前为止,这只是我的疯狂猜测,基于对静态或媒体文件的相同方法。但它真的没有给我关于 journalctl -u gunicorn 命令的任何错误信息。

除此之外...我检查了我的 models.py,它与 PostgreSQL 数据库完全相关。根据 Django 手册,我不必创建标准权限,如创建、删除、查看它们由 'django.contrib.auth'.

处理

在 settings.py 我有 'django.contrib.auth' 在 INSTALLED_APPS。据我了解,它应该自动处理用户、组、权限的多对多关系。

我有 django 版本 3.1.1,所以它是最新的。所以这里应该没有问题。

还能是什么?

所有用户和组都没有给我创建、删除错误...所有模型都已导入。这是我的 models.py 文件:

class AuthGroup(models.Model):
    name = models.CharField(unique=True, max_length=150)

    class Meta:
        managed = False
        db_table = 'auth_group'


class AuthGroupPermissions(models.Model):
    group = models.ForeignKey(AuthGroup, models.DO_NOTHING)
    permission = models.ForeignKey('AuthPermission', models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'auth_group_permissions'
        unique_together = (('group', 'permission'),)


class AuthPermission(models.Model):
    name = models.CharField(max_length=255)
    content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING)
    codename = models.CharField(max_length=100)

    class Meta:
        managed = False
        db_table = 'auth_permission'
        unique_together = (('content_type', 'codename'),)


class AuthUser(models.Model):
    password = models.CharField(max_length=128)
    last_login = models.DateTimeField(blank=True, null=True)
    is_superuser = models.BooleanField()
    username = models.CharField(unique=True, max_length=150)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=150)
    email = models.CharField(max_length=254)
    is_staff = models.BooleanField()
    is_active = models.BooleanField()
    date_joined = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'auth_user'


class AuthUserGroups(models.Model):
    user = models.ForeignKey(AuthUser, models.DO_NOTHING)
    group = models.ForeignKey(AuthGroup, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'auth_user_groups'
        unique_together = (('user', 'group'),)


class AuthUserUserPermissions(models.Model):
    user = models.ForeignKey(AuthUser, models.DO_NOTHING)
    permission = models.ForeignKey(AuthPermission, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'auth_user_user_permissions'
        unique_together = (('user', 'permission'),)

在我的 admin.py 中,我没有上述任何 table,但据我所知,在创建项目时它们已经自动处理了。

我的 PostreSQL 数据库如下所示: 每个table有:

--Columns
---list of columns
--Browse
---!Error Loading display.php&subject=table&server=...Allow&database=sc_sc&schema=public&action=tree&table=auth_group(200:OK)
--Indexes
---gives me indexes of PKs and unique keys
--Constraints
---gives me constraints
--Triggers
---No objects found (I didn't use triggers)
--Rules
---No objects found (Same)
--Admin
--Info
--Privileges
--Import
--Export

数据库中每个 table 的标准。

嗯,综合考虑...我相信...

如果您由于 PostgreSQL、Django 和 cpanel 版本之间的冲突而遇到某种类似的故障...您可以添加默认权限并使用数据库本身的 sql 查询将用户分配给组...

您可以执行 sql 脚本,如果不是更快的话,它不会比通过网站的管理端慢...

如果有其他想法,请告诉我...

谢谢