LoginSignup
2
0

More than 1 year has passed since last update.

Djangoのmodelを用いたレコード挿入で起きたエラー

Posted at

概要

今回は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の記載をファイル上部にまとめて記載すればいいわけではないみたいですね。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0