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

问题描述

更新

简短地以调试模式运行应用程序...保存后,它给了我以下内容:

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更新到最新版本的问题...


更新

为什么我无法找到如何将用户分配给组,如何从终端为用户/组分配默认权限?从逻辑上讲,这将是解决该问题的一种方法……并非完美,但至少是一些解决方案?

好吧,我想我可以通过sql查询在数据库本身中做到这一点...


如果我尝试将用户分配给组或向组或用户分配权限,则会出现500个服务器错误错误。

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

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)上运行良好,但是在由nginx + gunicorn运行的基于远程centos 7的服务器上运行失败。

是否可能需要打开gunicorn的权限文件夹?我没有看到任何明确的答案。对于gunicorn本身有权限的答案,但对于文件夹权限没有答案。到目前为止,基于对静态文件或媒体文件的相同方法,这只是我的大胆猜测。但这确实不会给我有关journalctl -u gunicorn命令的任何错误消息。

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

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

我有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',)

在我的admin.py中,我没有上面的任何表格,但是据我了解,创建项目时它们已经自动处理。

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

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

数据库中的每个表都非常标准。

解决方法

好吧,经过所有考虑,我相信...

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

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

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

谢谢

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...