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