获取django.db.utils.DatabaseError:ORA-00918:当我尝试打开Django管理页面时,出现列定义模糊的错误。下面是错误:
raise dj_exc_value.with_traceback(traceback)from exc_value File“/venomscribe/lib/python3.6/site-packages/django/db/backends/utils.py“,line 86,in _execute return self.cursor.execute(sql,params)File“/venomscribe/lib/python3.6/site-packages/django/db/backends/oracle/base.py“,line 514,in execute return self.cursor.execute(query,self._param_generator(params))django.db.utils.DatabaseError:ORA-00918:列定义不明确
查询
SELECT "DJANGO_ADMIN_LOG"."ID",
"DJANGO_ADMIN_LOG"."ACTION_TIME",
"DJANGO_ADMIN_LOG"."USER_ID",
"DJANGO_ADMIN_LOG"."CONTENT_TYPE_ID",
"DJANGO_ADMIN_LOG"."OBJECT_ID",
"DJANGO_ADMIN_LOG"."OBJECT_REPR",
"DJANGO_ADMIN_LOG"."ACTION_FLAG",
"DJANGO_ADMIN_LOG"."CHANGE_MESSAGE",
"AUTH_USER"."ID",
"AUTH_USER"."PASSWORD",
"AUTH_USER"."LAST_LOGIN",
"AUTH_USER"."IS_SUPERUSER",
"AUTH_USER"."USERNAME",
"AUTH_USER"."FIRST_NAME",
"AUTH_USER"."LAST_NAME",
"AUTH_USER"."EMAIL",
"AUTH_USER"."IS_STAFF",
"AUTH_USER"."IS_ACTIVE",
"AUTH_USER"."DATE_JOINED",
"DJANGO_CONTENT_TYPE"."ID",
"DJANGO_CONTENT_TYPE"."APP_LABEL",
"DJANGO_CONTENT_TYPE"."MODEL"
FROM "DJANGO_ADMIN_LOG"
INNER JOIN "AUTH_USER"
ON ("DJANGO_ADMIN_LOG"."USER_ID" = "AUTH_USER"."ID")
LEFT OUTER JOIN "DJANGO_CONTENT_TYPE"
ON ("DJANGO_ADMIN_LOG"."CONTENT_TYPE_ID" = "DJANGO_CONTENT_TYPE"."ID")
WHERE "DJANGO_ADMIN_LOG"."USER_ID" = :arg0
ORDER BY "DJANGO_ADMIN_LOG"."ACTION_TIME" DESC
FETCH FIRST 10 ROWS ONLY
3条答案
按热度按时间kq4fsx7k1#
这是系统需求问题。我使用的是Oracle 12.1,它与Django 3.0.3不兼容。降级到2.2解决了这个问题。
vnzz0bqm2#
您正在获取DJANGO_ADMIN_TYPE.ID、AUTH_USER.ID和DJANGO_CONTENT_TYPE.ID,因此您试图在结果集中有三个ID列。这是不允许的。我建议您为这些列设置别名,以便区分它们:
我还建议您使用白色空格和表别名,以使查询更易于阅读。
px9o7tmv3#
我在使用Oracle 12 c时遇到了这个错误。
如果其他人得到这个错误,我通过覆盖Django的模板并删除日志块来解决它。这个错误发生在Django的
django/contrib/admin/templates/admin/index.html:26
文件中。这一行调用函数
get_admin_log
,在那里会引发这个错误。通过移除这个区块,你可以正常呈现Django Admin主页。以下是Django关于覆盖模板的文档:https://docs.djangoproject.com/en/3.2/howto/overriding-templates/
基本上,需要在
setting.py
中指定模板文件夹,并在模板文件夹中创建admin/index.html
文件,并将原始索引中的内容放置在其中,如下所示:*注意:需要删除代码;如果你只是用HTML注解来注解它,Django/Jinja会继续调用这个函数。
另一个选择是重新创建
get_admin_log
函数来解决这个问题并保留历史记录。