努力将JSON数据转换为Django模型对象实例

努力将JSON数据转换为Django模型对象实例,json,django,django-models,Json,Django,Django Models,我试图获取一个JSON对象列表,将它们转换为Python dict,然后用每个Python dict的一个对象填充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) 我收到一条以前从未见过的错误消息: ImproperlyC

我试图获取一个JSON对象列表,将它们转换为Python dict,然后用每个Python dict的一个对象填充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框架已正确加载,但通常的想法是定义一个

因此,在您的文件结构中,如果
app
是您的
Concert
所在的应用程序,您可以构建目录和文件(此处以粗体列出):

您可以使用以下命令执行该命令:

$ manage.py load_concerts output.json --settings=my_settings
因此,就像您运行服务器一样(您可以将其视为一个内置命令),您可以添加特定的命令)

通过将文件名定义为参数,我们可以轻松加载所需的任何
.json
文件

一个独立的Python程序 您可以定义一个松散的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)
来自django.conf导入设置的

从projectroot将设置导入为projectsettings
设置。配置(项目设置)
进口django
django.setup()
导入json
从app.models导入音乐会
将open('output.json')作为f:
data=json.load(f)
对于concert in数据:
Concert.objects.create(**Concert)

然后,您可以将
PYTHONPATH
设置为项目根目录,从而加载特定设置,但我认为这可能会导致定义一个易于重用的命令所带来的更多痛苦。

如果您编写一个独立的python文件并执行它,这是一个常见错误

定义自定义命令 尽管可以确保Django框架已正确加载,但通常的想法是定义一个

因此,在您的文件结构中,如果
app
是您的
Concert
所在的应用程序,您可以构建目录和文件(此处以粗体列出):

您可以使用以下命令执行该命令:

$ manage.py load_concerts output.json --settings=my_settings
因此,就像您运行服务器一样(您可以将其视为一个内置命令),您可以添加特定的命令)

通过将文件名定义为参数,我们可以轻松加载所需的任何
.json
文件

一个独立的Python程序 您可以定义一个松散的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)
来自django.conf导入设置的

从projectroot将设置导入为projectsettings
设置。配置(项目设置)
进口django
django.setup()
导入json
从app.models导入音乐会
将open('output.json')作为f:
data=json.load(f)
对于concert in数据:
Concert.objects.create(**Concert)

然后,您可以将
PYTHONPATH
设置为项目根目录,从而加载特定的设置,但我认为这可能会导致比定义一个易于重用的命令更麻烦的问题。

如何执行此操作?只是某个地方的文件?通常使用自定义命令,以便首先加载Django。问题可能是,通过运行该文件,您不会加载设置。如何执行此操作?只是某个地方的文件?通常使用自定义命令,以便首先加载Django。问题可能是通过运行该文件,您没有加载设置。这是一个非常棒和彻底的解释,我非常感谢您花时间起草它。我得到一个重要的警告:没有名为management.commands.load_concerts的模块。我的大部分谷歌搜索让我相信这是我的init.py文件丢失或命名错误的问题,但我已经检查并再次检查了这个问题。可能是别的吗?当然!在您提交回复后,我编辑了我的回复,但出现了一个错误。有什么问题吗?@Danny:argh,你可能也应该在管理层添加一个
\uuuu init\uuuuy.py
文件,抱歉,它会编辑的。啊,太好了。根本不需要道歉。谢谢你抽出时间。现在我得到一个IOError:没有这样的文件或目录:“output.json”。该文件与load_concerts.py文件位于同一目录中。我猜我需要在设置中切换才能从这里加载?或者我可以把这些文件放在其他地方?啊,那么路径应该类似于
someapp/management/commands/output.json
(带有
someapp
应用程序的名称)。路径是相对于你调用脚本的位置。这是一个非常棒和彻底的解释,我非常感谢你花时间起草它。我得到一个重要的警告:没有名为management.commands.load_concerts的模块。我的大部分谷歌搜索让我相信这是我的init.py文件丢失或命名错误的问题,但我已经检查并再次检查了这个问题。可能是别的吗?当然!在您提交回复后,我编辑了我的回复,但出现了一个错误。有什么问题吗?@Danny:argh,你可能也应该在管理层添加一个
\uuuu init\uuuuy.py
文件,抱歉,它会编辑的。啊,太好了。根本不需要道歉。谢谢你抽出时间。现在我得到一个IOError:没有这样的文件或目录:“output.json”。该文件与load_concerts.py文件位于同一目录中。我猜我需要在设置中切换才能从这里加载?或者我可以把这些文件放在其他地方?啊,那么路径应该类似于
someapp/management/commands/output.json
(带有
someapp
应用程序的名称)。这些路径相对于调用脚本的位置。