繁体   English   中英

Django数据库错误:未安装social_auth时缺少表social_auth_usersocialauth

[英]Django database error: missing table social_auth_usersocialauth when social_auth is not installed

我正试图在Django应用程序中处理一个非常令人费解的错误。 当DEBUG = False时,尝试删除用户(通过user.delete() )会出现此数据库错误:

DatabaseError: relation "social_auth_usersocialauth" does not exist
LINE 1: ...", "social_auth_usersocialauth"."extra_data" FROM "social_au...

但是,我在INSTALLED_APPS中没有social_auth或类似名称的任何东西,我的数据库中也没有这样的表,我的代码也没有引用任何类似的东西(我在整个'社交'上运行了一个文本搜索项目文件夹) - 再次,这在DEBUG = True时工作正常。 social_auth安装在我的系统和我的PYTHONPATH上,但是我无法看到这个应用程序在哪里得到它应该在其数据库中拥有social_auth的表的想法,更不用说为什么它只在DEBUG = False时才这样认为。

我的应用程序可以通过哪些途径获取此表,我怎么能说服它不应该在那里?

这个问题可能是由Django内容类型实现的已保存的通用关系引起的。 Django中的关系不仅是静态的,由模型和INSTALLED_APPS实现,而且还由表django_content_type实现的动态实现,它保存了从数字id到app_label + model的映射。 可能的动态关系的示例是权限或注释。 您可以拥有或没有任何已安装应用程序的任何表的权限。 您可以在不更改任何模型的情况下,对所有内容(例如文章,用户)发表评论。 通过保存与该模型(表)相关的ContentType的数字id和相关对象(行)的主键来实现该关系。

Django并不指望有人可以手动操作数据库。 如果您使用south进行操作,那么如果您在卸载应用程序之后再运行syncdb ,则南方会询问您是否要自动删除orphant内容类型。 然后可以安全地删除未使用的表,而不会在以后引用。

(可能的hack: delete from django_content_type where app_label='social_auth'但是south是不可靠的。)

问题的许多部分仍然是开放的。

编辑
为什么它不是正确的方式:所有泛型关系都是从后代到父级,所有关于关系的数据都保存在后代中。 如果子应用程序从INSTALLED_APPS中删除,那么django.db代码永远不会尝试删除后代,因为它无法识别哪些列包含关系数据。

该表由django-social-auth应用程序创建。

看起来您已将其添加到项目中并且尚未启动migrate (或syncdb )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM