我正在尝试获取JSON对象的列表,将它们转换为Python字典,然后为每个Python字典使用一个对象填充Concert模型。
import json
from models import Concert
with open('output.json') as f:
data = json.load(f)
for concert in data:
Concert.objects.create(**concert)
我收到一条以前从未见过的错误消息:
ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
这很容易解决吗?我的模型中有一个外键对应于JSON对象中的一对键值对;与这个错误有关吗?
如果您编写一个独立的python文件并执行它,这是一个常见错误。
尽管可以确保正确加载Django框架,但通常的想法是定义一个自定义命令[doc]。
因此,在文件结构中,如果app
应用程序Concert
位于您的应用程序中,则可以构造目录和文件(此处以粗体显示):
someapp / 管理/ __init__.py 命令/ __init__.py load_concerts.py __init__.py models.py views.py
当__init__.py
文件是空的。然后您load_concerts.py
可以看起来像:
from django.core.management.base import BaseCommand, CommandError
import json
from app.models import Concert
class Command(BaseCommand):
help = 'Load JSON concert data'
def add_arguments(self, parser):
parser.add_argument('concert_file', type=str)
def handle(self, *args, **options):
with open(options['concert_file']) as f:
data = json.load(f)
for concert in data:
Concert.objects.create(**concert)
您可以使用以下命令执行命令:
$ manage.py load_concerts output.json --settings=my_settings
因此,就像运行服务器一样(您可以将其视为内置命令),因此可以添加特定命令)。
通过将文件名定义为参数,我们可以轻松加载所需的任何.json
文件。
您可以定义一个松散的Python文件。在这种情况下,您需要使用以下命令加载设置:
from django.conf import settings
from projectroot import settings as projectsettings
settings.configure(projectsettings)
import django
django.setup()
import json
from app.models import Concert
with open('output.json') as f:
data = json.load(f)
for concert in data:
Concert.objects.create(**concert)
然后,您可以将设置PYTHONPATH
为项目根目录,从而加载特定的设置,但是我认为这可能会带来更多麻烦,即定义可以轻松重用的命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句