[英]Django database error: missing table social_auth_usersocialauth when social_auth is not installed
[英]no such table: social_auth_usersocialauth
問題是, python-social-auth
2016 年 12 月起, python-social-auth
已被棄用。
遷移現有項目
根據此處的遷移說明:
pip install python-social-auth==0.2.21
python manage.py migrate
pip install social-auth-app-django
python manage.py migrate
pip uninstall python-social-auth
新項目
pip install python-social-auth==0.2.21
pip install social-auth-app-django
python manage.py migrate
pip uninstall python-social-auth
我解決了這個問題。 似乎 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 腳本和安裝包中的模型生成所有表。
遇到的問題:
舊應用程序需要修改settings.py
以使用 python 遷移工具生成表。
在舊應用程序中,模型與新版本的 django 不兼容,這就是我得到的: TypeError: __init__() missing 1 required positional argument: 'on_delete'
很明顯,最新版本的社交應用程序庫沒有生成它需要的表。
解決方案:
基本上 Renan Fonteles 在他的帖子中描述的步驟是合理的,他的帖子有幫助。 暫時降級到 python-social-auth==0.2.21 有效。 要解決此問題,您可以采取以下步驟:
從 venv 中刪除所有站點包,並創建一個新的 venv,如: $ python3 -m venv .
像以前一樣安裝所有要求,但不是最新版本的social-auth-app-django
運行: $ pip install python-social-auth==0.2.21
所以從requirements.txt
刪除 social-auth-app-django
此時,對於 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)
manage.py
不會安裝'social_django'
應用程序,因為在這一步中降級到的包沒有這個應用程序,舊的應用程序是: 'social.apps.django_app.default'
。
改變'social_django'
到'social.apps.django_app.default'
在settings.py INSTALLED_APPS = [...]
段,或添加前者的部分。
settings.py DATABASES ...
可以有這樣的部分:
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3_user_authentication'),
},
運行: python manage.py migrate
,如果settings.py
為您的身份驗證應用程序設置了數據庫,它應該使您成為您需要的表。
升級到最新版本的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 中刪除。
將應用程序從'social.apps.django_app.default'
改回'social_django'
現在再次運行python manage.py migrate
。
這些步驟使 sqlite db 文件包含您以后運行應用程序所需的表,如果您曾經在此數據庫上進行遷移,則可能需要保存/備份此 dbfile。 如果您的 settings.py 的其余部分都正確,那么'social_django'
應用程序現在就可以工作了。
這些帖子對讓應用程序運行有很大幫助:
最終,我獲得了與 Auth0 和 Google 一起使用的身份驗證。 尋找對social-auth-app-django
的修復以使這個答案過時。 如果應用程序是從頭開發的,則最新的包應該生成架構,應該不需要從中降級社交應用程序導出表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.