Djangoでバッチスクリプトを実行する時にエラー出た話

問題

モデルを操作するコードを作成し、コード末にいつもの if __name__ == '__main__': を記述して単体テストをしようとすると、

ModuleNotFoundError: No module named 'my_project' というエラーメッセージが表示。


modelのimport文でエラーが発生しているようだった。
from my_project.models import MyAppModel 


対策

ファイル文頭に以下の記述。

if __name__ == '__main__':

import os
import sys
import django

sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
django.setup()

※以下の2ヵ所は作成した環境に合わせ修正。


sys.path.append(os.path.join(os.path.dirname(__file__), "..", ".."))

作成環境の階層に合わせ, "..", ".." を修正のこと


 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')
作成環境の階層に合わせ'config.settings'の記述を修正


django.setup()でセットアップして設定を読み込んでくれるっぽい。


コメント