亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Django:重寫“User”類時沒有這樣的表

Django:重寫“User”類時沒有這樣的表

慕婉清6462132 2023-08-08 16:29:19
我正在使用 Django 3.1 制作一個 Django 項目。我試圖User用 Django 重寫該類。這是我在 中寫的app_questions/models.py:import django.contrib.auth.modelsfrom django.contrib.auth.models import AbstractUserclass User(AbstractUser):    #passsettings.py:INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'app_questions',]AUTH_USER_MODEL = 'app_questions.User'我還在superuser做這些之前創建了一個。之后我makemigrations在migratecmd中運行了服務器。我打開管理頁面并嘗試編輯User我之前創建的,但是當我單擊編輯頁面時,出現此錯誤:OperationalError at /admin/app_questions/user/1/change/no such table: app_questions_user_groupsRequest Method: GETRequest URL:    http://127.0.0.1:8000/admin/app_questions/user/1/change/Django Version: 3.1Exception Type: OperationalErrorException Value:    no such table: app_questions_user_groupsException Location: C:\Users\*\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\backends\sqlite3\base.py, line 413, in executePython Executable:  C:\Users\*\AppData\Local\Programs\Python\Python37-32\python.exePython Version: 3.7.4Python Path:    ['C:\\Users\\*\\django_sample\\vitural_env\\zeaf', 'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip', 'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs', 'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\lib', 'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32', 'C:\\Users\\*\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages']我找到了幾個帖子來解決這個問題。這些是我嘗試過的方法:makemigrations和migrate(同樣的錯誤)migrate (appname) --fake(同樣的錯誤)將內容添加到User類中(/admin: 中的錯誤no such column)migrate --sync-db(同樣的錯誤)migrate --run-syncdb(同樣的錯誤)$ manage.py (appname) zero(失敗Unknown command:)migrate --fake (appname) zero(同樣的錯誤)他們都沒有解決問題。2016年或2017年的帖子現在好像已經不起作用了。如果這是重復的帖子,我們將不勝感激并抱歉。
查看完整描述

3 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

當您運行第一個migrate命令時,所有默認遷移將生效,這意味著將創建所有表和關系。

當您自定義默認模型User(覆蓋默認User模型并為其提供值AUTH_USER_MODEL)時,所有關系都會發生變化。

創建數據庫表后更改 AUTH_USER_MODEL 會變得更加困難,因為它會影響外鍵和多對多關系

不建議中途更改用戶模型,因為您需要手動修復數據庫架構。

如果您中途更改了用戶模型,解決此問題的最簡單方法是:刪除所有遷移、數據庫并運行 makemigrations 和 migrate 命令。這創建了一個新的數據庫模式。

這是文檔中所說的限制:

由于Django對可交換模型的動態依賴特性的限制,AUTH_USER_MODEL引用的模型必須在其應用程序的第一次遷移中創建(通常稱為0001_initial);否則,您將遇到依賴性問題。

來自文檔:

  • 自定義用戶模型

  • 在項目中更改為自定義用戶模型

最佳實踐是在項目開始時創建自定義用戶模型,然后稍后遷移并處理用戶模型,以防稍后更改與身份驗證或用戶模型相關的任何內容


查看完整回答
反對 回復 2023-08-08
?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

此錯誤通常意味著您的遷移出了問題,并且當您在事后嘗試進行此類更改時經常會發生此錯誤。一種可能的解決方案是刪除除以initial.py. 一次makemigrations又一次migrate,它應該有效。



查看完整回答
反對 回復 2023-08-08
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

如果我沒理解錯的話,你的項目已經在運行了,那就是 makemigration 不是第一次 makemigration。如果是這樣,請嘗試刪除數據庫并再次運行 makemigration(也許在測試開發環境中),只是為了檢查問題。如果這個工作(并且應該)你已經發現了問題。如果您不想刪除數據庫,也許您可以擴展用戶而不是覆蓋。

查看完整回答
反對 回復 2023-08-08
  • 3 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號