

python3,Djangoでwebシステムを開発しています。

ローカルで動作を確認後、リモートのサーバーへデプロイするという方法で開発しております。

modelクラスに変更があった場合は、リモートのサーバーでmakemigratinons,
migrateが必要になりますが、makemigrationsを行う際に、以下のエラーメッセージが出ます。

[code]

    KeyError: ('admin_csv', 'prefcityno')
    
[/code]

このエラーについて調べると、'admin_csv'に関係する中で、'prefcityno'がみつからないというような内容と思います。

考えられる原因は、ローカル環境とリモート環境での、makemigrationsと、maigrateの実行に仕方だと思っています。  
ローカル環境では、希望する動きになるまでmakemigratinsとmigrateを何度か繰り返し、動作を確認した後に、リモートへデプロイして、makemigratinsした作成したファイルが、5〜6個ある中で、1度だけmigrateしました。

コンフリクトしているとエラーが出たため対応したのですが、その内容が悪かったのかと思います。関係しそうなファイル（0001_initial.py等）を削除してから、マージ等をしました。

その後、リモートのデータベースのテーブルを削除して、migrationsのファイルを削除してから、makemigratinsしても、KeyError:
('admin_csv', 'prefcityno')が発生してしまう状況です。

'admin_csv'は、変更を加えてエラーがでるmodels.pyを含むappディレクトリです。  
'prefcityno'は、ローカル環境で開発中に使用してた名前で、最終的にデプロイしたコードには含まれていません。

だいぶ深い所でのエラーなのではないかと心配しています。  
今回のエラーの解決策について、ご教授いただきないでしょうか？

ファイル等の階層は以下のとおりです。

[code]

    project
    -- accounts
    -- admin_csv
    ---- migrations
    ---- __init__.py
    ---- admin.py
    ---- apps.py
    ---- models.py
    ---- tests.py
    ---- views.py
    -- project
    -- app
    -- static
    -- manage.py
    env
    
[/code]

`$ python3 manage.py makemigrations` 後のエラーメッセージの詳細は以下のとおりです。

[code]

    Traceback (most recent call last):
      File "manage.py", line 21, in <module>
        main()
      File "manage.py", line 17, in main
        execute_from_command_line(sys.argv)
      File "/home/app/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
        utility.execute()
      File "/home/app/venv/lib/python3.7/site-packages/django/core/management/__init__.py", line 395, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/home/app/venv/lib/python3.7/site-packages/django/core/management/base.py", line 328, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/home/app/venv/lib/python3.7/site-packages/django/core/management/base.py", line 369, in execute
        output = self.handle(*args, **options)
      File "/home/app/venv/lib/python3.7/site-packages/django/core/management/base.py", line 83, in wrapped
        res = handle_func(*args, **kwargs)
      File "/home/app/venv/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py", line 141, in handle
        loader.project_state(),
      File "/home/app/venv/lib/python3.7/site-packages/django/db/migrations/loader.py", line 324, in project_state
        return self.graph.make_state(nodes=nodes, at_end=at_end, real_apps=list(self.unmigrated_apps))
      File "/home/app/venv/lib/python3.7/site-packages/django/db/migrations/graph.py", line 315, in make_state
        project_state = self.nodes[node].mutate_state(project_state, preserve=False)
      File "/home/app/venv/lib/python3.7/site-packages/django/db/migrations/migration.py", line 87, in mutate_state
        operation.state_forwards(self.app_label, new_state)
      File "/home/app/venv/lib/python3.7/site-packages/django/db/migrations/operations/models.py", line 256, in state_forwards
        state.remove_model(app_label, self.name_lower)
      File "/home/app/venv/lib/python3.7/site-packages/django/db/migrations/state.py", line 99, in remove_model
        del self.models[app_label, model_name]
    KeyError: ('admin_csv', 'prefcityno')
    
[/code]

実行環境  
Python: 3.7.5  
Django: 2.2.2  
PostgreSQL:12.1


CC BY-SA 4.0
2020-01-09T05:35:24.077
62092
2020-02-05T00:50:12.490
2020-01-09T06:20:49.430
36988
36988
question
python python3 django
makemigrationsをした時のKeyError: ('　', '　')が解決できない


エラーが消えて `makemigrations` ができました。原因はリモートのサーバーに過去の `migrations` のファイルが残っていた事です。

ローカルのプロジェクトで削除してデプロイしており、そのままの構成になっているかと思っていましたが、過去のファイルの場合、手作業での削除が必要でした。

* * *

_この投稿は[@tio
さんのコメント](https://ja.stackoverflow.com/questions/62092/makemigrations%e3%82%92%e3%81%97%e3%81%9f%e6%99%82%e3%81%aekeyerror-%e3%81%8c%e8%a7%a3%e6%b1%ba%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84#comment67753_62092)
の内容を元に コミュニティwiki として投稿しました。_


CC BY-SA 4.0
2020-02-05T00:50:12.490
62780
2020-02-05T00:50:12.490
3060
62092
answer