makemigrations は、モデルに対して行った変更をもとに新しいマイグレーションを作成します
migrate は、マイグレーションを適用したり適用をキャンセルするのに使います
makemigrations は、正常に生成できるが migrate で SQL エラーが発生する場合の対処方法です
結論から申しますと MySQL での error 確認する方法です
$ python manage.py makemigrations ~ Migrations for 'myapp': myapp/migrations/0001_initial.py - Create model StateMst - Create model User ~ $ python manage.py migrate --fake-initial ~ Operations to perform: Apply all migrations: admin, auth, myapp, contenttypes, sessions Running migrations: Applying myapp.0002_auto_20200714_1234...Traceback (most recent call last): ~ MySQLdb._exceptions.OperationalError: (1005, "Can't create table 'myapp_dev.#sql-789_34a8' (errno: 150)") ~
このエラーメッセージだけだと具体的に何の原因かわからない
なので MySQL で詳細エラーを確認する
# dbshell の起動 $ python manage.py dbshell ~ MariaDB [***]> show engine innodb status; ~ ------------------------ LATEST FOREIGN KEY ERROR ------------------------ 200714 00:00:00 Error in foreign key constraint of table `myapp_dev`.`order_information`: Alter table `myapp_dev`.`order_information` with foreign key constraint failed. Referenced table `myapp_dev`.`view_payment_methods` not found in the data dictionary near ' FOREIGN KEY (`order_information_payment_method_id`) REFERENCES `view_payment_methods` (`id`)'. ~
この例では、外部キー制約の違反が発生した模様で model を確認し対処する
追記:MySQL の view に対して外部キー参照する場合、Django Model field の on_delete は、DO_NOTHING に設定する
SET_NULL だと何故か?上記のエラーが発生する?
Was this helpful?
0 / 0