diadia

興味があることをやってみる。自分のメモを残しておきます。

django エラー:AttributeError: 'ManyToManyField' object has no attribute 'm2m_reverse_field_name'が出る

python manage.py makemigrations

をしたら以下のようなエラーが出た。

AttributeError: 'ManyToManyField' object has no attribute 'm2m_reverse_field_name'

エラーが出るまでの過程

models.pyをいじり、makemigrationsを終わったあとにmigrateした。

問題点はどのmodels.pyのどのクラスのManyToManyFieldからエラーが発生しているかエラー内容から判断する事ができない点だ。このエラー対処には以下の方法がある。

https://stackoverflow.com/questions/34698845/manytomanyfield-object-has-no-attribute-m2m-reverse-field-name

やり方はmigrationsディレクトリにある dependencies に係る内容を編集する手続きをとるようだ。自分の場合migration内のファイルを理解していないのでこの方法を採用しなかった。今となってはこの方法を採用して取り返しがつかなくなったら最終手段として自分の行なった方法を用いればより理解が深まる機会になったと思われる。

自分が行った方法

この方法は自分が客観的な根拠なくいじった結果エラーを解消した方法だから今後色々問題が生じる可能性がある。問題が生じたら追記することにする。

makemigration,migrateする結果各アプリのmigratinsに001...py,002...py,といったファイルが作られる。このファイルのdependencisの問題とのことだったのでこのファイルをすべて消す。
するとmigrateで新たに001_initial.pyがそれぞれのアプリ内に作られる。これでエラーが解消した。注意すべき点は__init__.pyは消さないことだ。このファイルはpython manage.py startapp *** で作られるファイルであり、migrateで作られるファイルではない。