概要
今回はDjangoを学習している際に詰まったエラーの備忘録を記載したいと思います。
環境
Django: '4.0.4'
Python: '3.10.4'
前提
まず前提として下記状況を想定しています。
- nameとageのカラムを持ったPersonテーブルにデータを挿入したい
~/model_app/models.py
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=10)
age = models.IntegerField()
エラー概要
テーブルにデータを挿入するために下記ファイルにて処理を記載し実行しました。
~/main.py
import os
from django import setup
from model_app.models import Person
# 環境変数をセット
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '左記の環境変数の値')
setup()
sample_person = Person(name='tanaka', age=20)
sample_person.save()
上記ファイルを実行
python3 main.py
すると下記のエラーが出ました。
django.core.exceptions.ImproperlyConfigured:
Requested setting INSTALLED_APPS, but settings are not configured.
You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
エラー文を読むとDJANGO_SETTINGS_MODULE
を設定するか、setting.configure()
を呼び出せと言われています。
しかし。DJANGO_SETTINGS_MODULE
は定義しているのになぜか。
解決法
いろいろ調べてみたところどうやら処理の記載する順番が異なるせいでエラーが起こっているらしい。
下記記事を参考に処理の順番を変えてみました。
修正した内容が下記です。
~/main.py
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '左記の環境変数の値')
from django import setup
setup()
from model_app.models import Person
sample_person = Person(name='tanaka', age=20)
sample_person.save()
これでテーブルにデータを挿入することができました。
importの記載をファイル上部にまとめて記載すればいいわけではないみたいですね。