きっかけ
Djangoではmigrateファイル生成とマイクレートの実行は別々のコマンドのためマイグレーション時には次の2つを打つ必要性が有ります。
$ pipenv run python manage.py makemigrations
$ pipenv run python manage.py migrate
そこでPipenvにあるオプションであるscriptsを使って一つにまとめようと次の内容を記述しました。
(前略)
[scripts]
dev = "python manage.py runserver"
migrate = "python manage.py makemigrations && python manage.py migrate"
実行すると次のようなエラーが出ます。
% (*'-')<3 pipenv run migrate
No installed app with label 'python'.
No installed app with label 'manage.py'.
No installed app with label 'migrate'.
解決策
bashのCオプションをつかってコマンドを流し込みます。cオプションは引数の文字列からコマンドを実行してくれるというものになっています。今回書いたものは次にのものになります。
(前略)
[scripts]
dev = "python manage.py runserver"
migrate = "bash -c 'python manage.py makemigrations && python manage.py migrate'"
これで実行してみます。
% (*'-')<3 pipenv run migrate [~/dev/socPlProject/yebisu][add/yebsu]
No changes detected
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
No migrations to apply.
問題なく実行されました。