Djangoのアプリの中でゴニョゴニョするんじゃなく、

別のスクリプトからDjangoアプリを呼び出して操作したい場合。

テストとかで。

公式的にはこの辺。

で、現状ちゃんと動くのは↓

import os
import sys
import django

#sys.path.append('/home/hogeuser/sandbox/mysite')
sys.path.append(os.getcwd())
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
django.setup()

#↑の後ならモデルとか読み込んで使える
from myapp import models

a = SampleTable()
a.save()

なんだけど、環境変数とか使うのどうにかならないかなーと思い、試してみた。

#公式に乗ってるやつ ⇒ これは無理
import django
from django.conf import settings
import mysite.settings as mysettings
settings.configure(default_settings=mysettings, DEBUG=True)
django.setup()

# 下のエラーが出る
# AttributeError: module 'mysite.settings' has no attribute 'LOGGING_CONFIG'

どうもsettingsを入れるだけだと、djangoのデフォルトのsettingsを丸ごと上書きしてるらしく、

必要な定義が消えちゃうっぽい。

やるなら、自分のsettingsにDjangoのデフォルトのsettingsを全部書かないとダメっぽ。

そして、それがかなり量があるのでしんどい。

つか、公式でもデフォルトはdjangoでやってるから原則変えるんじゃねー

みたいな感じっぽい。

で、次に試したのは↓

#これは動くけど、自分のアプリが読み込まれてない
import django
from django.conf import settings
from django.conf import global_settings
settings.configure(default_settings=global_settings, DEBUG=True)
django.setup()

Djangoのデフォルトを読み込ませてみたらいいんじゃないか的な。

これだとうまくいくけど、自分のINSTALL_APPSが読み込まれてないので、色々ダメ。

まー当たり前か。

という事で、デフォルトは上書きせずにマージするようなやり方がないか調べてたけど、

良く分かりませんでした。。。

どうも環境変数に入れる以外に良い方法が出回ってなさそうですね。

つか、manage.pyの中でこの方法でやってるからこれしかないのかしらね。

誰かいい方法知ってたら教えてほしい。