makemigrations創建遷移失敗錯誤如下:
Tracking file by folder pattern: migrations
Traceback (most recent call last):
File "/home/pyvip/.pycharm_helpers/pycharm/django_manage.py", line 52, in <module>
run_command()
File "/home/pyvip/.pycharm_helpers/pycharm/django_manage.py", line 46, in run_command
run_module(manage_file, None, '__main__', True)
File "/usr/lib/python3.6/runpy.py", line 205, in run_module
return _run_module_code(code, init_globals, run_name, mod_spec)
File "/usr/lib/python3.6/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/usr/lib/python3.6/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/pyvip/project/study/newssite/manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/core/management/commands/makemigrations.py", line 143, in handle
loader.project_state(),
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/db/migrations/loader.py", line 322, in project_state
return self.graph.make_state(nodes=nodes, at_end=at_end, real_apps=list(self.unmigrated_apps))
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/db/migrations/graph.py", line 378, in make_state
project_state = self.nodes[node].mutate_state(project_state, preserve=False)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/db/migrations/migration.py", line 87, in mutate_state
operation.state_forwards(self.app_label, new_state)
File "/home/pyvip/.virtualenvs/pro_django/lib/python3.6/site-packages/django/db/migrations/operations/fields.py", line 70, in state_forwards
state.models[app_label, self.model_name_lower].fields.append((self.name, field))
KeyError: ('news', 'hot_news')
除了上面的錯誤之外, 有兩個與`tb_banner`和`tb_hotnews`不能執行寫操作(即修改添加資料)
錯誤背景:
專案時新聞博客網站, 使用django+mysql
通過模型欄位創建了: 新聞表`tb_news`, 輪播圖表`tb_banner`, 熱門新聞表`tb_hotnews`
輪播圖表 和 熱門新聞表 與 新聞表 是一對一關系
這三個表的結構和關系如下圖:

求助各位大佬幫忙分析一下大概原因和解決方法!
uj5u.com熱心網友回復:
先去掉資料庫外鍵 ,再匯入資料為了性能 資料庫外鍵可以不增加
uj5u.com熱心網友回復:
謝謝大佬,是先匯出資料再刪掉外鍵嘛?去掉資料庫外鍵那里可以說的詳細點嗎?
uj5u.com熱心網友回復:
先洗掉外鍵 才能匯入成功。然后可以恢復外鍵,為了性能也可以不恢復洗掉外鍵的sql命令:
Alter table 表名 drop foreign key 外鍵名;
uj5u.com熱心網友回復:
我按照你說的試了一下, 結果并不理想
我的步驟是這樣:
1. 先刪掉外鍵
2. 打開專案, 嘗試添加資料到表中, 失敗
3. 嘗試運行遷移, 失敗
不知道我的步驟是否與你的意思又出入
uj5u.com熱心網友回復:
資料遷移是怎么操作的uj5u.com熱心網友回復:
運行遷移指的是python manage.py makemigrations和migrate
我在運行這兩者的時候都會出現問題中的錯誤資訊KeyError
仔細觀察了那個錯誤資訊, 拋出的KeyError: ('news', 'hot_news')應該對應的就是app_label和model_name_lower
app label我設定的是'news'沒錯,
model name就有點問題了, 我目前得到的model name是'hotnews', 通過后臺列印得到的
但是最開始運行遷移時django自動生成的model name卻是'hot_news', 跟這里的keyerror中顯示的一樣,
下面是遷移生成的代碼:
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('news', '0001_initial'),
]
operations = [
...
migrations.AddField(
model_name='hot_news',
name='news',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='news.News'),
),
...
]
感覺真相就在眼前, 但是卻隔一層窗戶紙
備注一下:
tb_banner和tb_hotnews都是先前定義模型, 你可以在這篇文章中看到原始碼https://blog.csdn.net/makesomethings/article/details/99716702
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/147451.html
上一篇:2006-京淘Day07
