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

丹尼

我正在尝试获取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程序

可以定义一个松散的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章