簡體   English   中英

沒有這樣的表:social_auth_usersocialauth

[英]no such table: social_auth_usersocialauth

我正在嘗試開發一個使用 Google API 進行身份驗證的 Django 應用程序。 一切似乎都很好,但是登錄后我收到了這個錯誤:沒有這樣的表: social_auth_usersocialauth ,我不知道如何解決它。

在此處輸入圖片說明

有沒有人已經遇到過同樣的問題可以幫助我?

我感謝任何幫助,謝謝。

問題是, python-social-auth 2016 年 12 月起, python-social-auth已被棄用。

遷移現有項目

根據此處的遷移說明:

  1. pip install python-social-auth==0.2.21
  2. 運行遷移: python manage.py migrate
  3. 為 Django 安裝所需的模塊: pip install social-auth-app-django
  4. 再次運行遷移: python manage.py migrate
  5. 根據同頁的設置段落更新Django的應用列表和后端相關設置。
  6. 現在您可以安全地卸載舊包: pip uninstall python-social-auth

新項目

  1. pip install python-social-auth==0.2.21
  2. pip install social-auth-app-django
  3. 根據遷移頁面的設置段落設置Django的應用列表和后端相關設置。
  4. 應用遷移: python manage.py migrate
  5. 卸載舊包: pip uninstall python-social-auth

我解決了這個問題。 似乎 python-social-auth 在遷移方面存在一些問題。

  1. 我不得不卸載 python-social-auth 的最新版本
  2. 我安裝了版本 python-social-auth 0.2.21
  3. 應用遷移(python manage.py migrate)
  4. 卸載 python-social-auth 0.2.21
  5. 安裝了最新版本的 python-social-auth

至少在我的情況下,python-social-auth 的最新版本無法正確遷移數據庫。

看起來您已經安裝了其中一種社交身份驗證應用程序,但此后尚未遷移您的數據庫。

嘗試: python manage.py migrate

對我來說,問題是我在 settings.py 中的 installed_apps 中缺少social-django

與 Auth0 集成時與 Django 3.0.3 相同的問題,從頭開始啟動應用程序。

使用上面的答案讓它工作; 因為我現在正在開發這段代碼,不想從頭開始。 對於“新代碼”,不得不說簡單地降級到舊版本並執行“python3 manage.py migrate”並不總是如此。 Django 3.0.3 models.ForeignKey(...) 的工作方式不同,舊版本的社交應用程序將無法工作。

使用 Django 3.0.3 和 social-auth-app-django 3.1 完成了這項工作。 目標是使用 Django manage.py 腳本和安裝包中的模型生成所有表。

遇到的問題:

  1. 舊應用程序需要修改settings.py以使用 python 遷移工具生成表。

  2. 在舊應用程序中,模型與新版本的 django 不兼容,這就是我得到的: TypeError: __init__() missing 1 required positional argument: 'on_delete'

很明顯,最新版本的社交應用程序庫沒有生成它需要的表。


解決方案:

基本上 Renan Fonteles 在他的帖子中描述的步驟是合理的,他的帖子有幫助。 暫時降級到 python-social-auth==0.2.21 有效。 要解決此問題,您可以采取以下步驟:

  1. 從 venv 中刪除所有站點包,並創建一個新的 venv,如: $ python3 -m venv .

  2. 像以前一樣安裝所有要求,但不是最新版本的social-auth-app-django運行: $ pip install python-social-auth==0.2.21所以從requirements.txt刪除 social-auth-app-django

  3. 此時,對於 django 3.0.3,在.../site-packages手動編輯應用程序的模型, models.ForeignKey必須有一個額外的參數。

${DJANGO_ENV_DIR}/lib/python3.7/site-packages$ find . -name "*.py" -exec grep -Hn 'models.Foreign' {} \;
./social/apps/django_app/default/migrations/0002_add_related_name.py:25:            field=models.ForeignKey(related_name='social_auth', to=USER_MODEL)
./social/apps/django_app/default/migrations/0001_initial.py:97:                ('user', models.ForeignKey(
./social/apps/django_app/default/models.py:33:    user = models.ForeignKey(USER_MODEL, related_name='social_auth')

添加, on_delete=models.CASCADE作為上面出現的每個文件中models.ForeignKey調用的最后一個參數。 因為, models.ForeignKey必須有額外的參數: ... = models.ForeignKey(..., on_delete=models.CASCADE)

  1. manage.py不會安裝'social_django'應用程序,因為在這一步中降級到的包沒有這個應用程序,舊的應用程序是: 'social.apps.django_app.default'

  2. 改變'social_django''social.apps.django_app.default'settings.py INSTALLED_APPS = [...]段,或添加前者的部分。

  3. settings.py DATABASES ...可以有這樣的部分:

    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3_user_authentication'),
    },
  1. 運行: python manage.py migrate ,如果settings.py為您的身份驗證應用程序設置了數據庫,它應該使您成為您需要的表。

  2. 升級到最新版本的social-auth-app-django
    $ pip uninstall python-social-auth==0.2.21
    $ pip install social-auth-app-django
    現在您可以將social-auth-app-django放回requirements.txt

注意:您不能真正將python-social-auth==0.2.21稱為依賴項,要生成表,您需要將其添加到 INSTALLED_APPS,最后您必須將其從 INSTALLED_APPS 中刪除。

  1. 將應用程序從'social.apps.django_app.default'改回'social_django'

  2. 現在再次運行python manage.py migrate

這些步驟使 sqlite db 文件包含您以后運行應用程序所需的表,如果您曾經在此數據庫上進行遷移,則可能需要保存/備份此 dbfile。 如果您的 settings.py 的其余部分都正確,那么'social_django'應用程序現在就可以工作了。

  • 如果您打算使用 Postgres / MySQL / ... 等,您應該使用與步驟 5 中不同的設置來設置數據庫。為此專門創建一個單獨的架構,您可以使用類似SQuirreL SQL Client http的工具: //squirrel-sql.sourceforge.net/導出創建的 DDL。

這些帖子對讓應用程序運行有很大幫助:

最終,我獲得了與 Auth0 和 Google 一起使用的身份驗證。 尋找對social-auth-app-django的修復以使這個答案過時。 如果應用程序是從頭開發的,則最新的包應該生成架構,應該不需要從中降級社交應用程序導出表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM