使用本地 JSON 文件填充 Django DB

mam*_*ejr 2 python django json

我使用 Django 创建一个 Web 应用程序,我需要基本数据。为此,我有一个 JSON,其中包含我想要导入到 Django 数据库中的大量数据。

所以我正在寻找一种在不修改 JSON 文件的情况下导入这些数据的方法。

从 JSON 中提取:

[
  {
    "key": "sword",
    "name": "Sword",
    "tier": 1
  },
  {
    "key": "bow",
    "name": "Bow",
    "tier": 1
  },
...
]
Run Code Online (Sandbox Code Playgroud)

我的文件包含大量数据,更改它需要很长时间。是否有一个脚本/程序来导入与以下模型相对应的所有这些数据:

from django.db import models

class Item(models.Model):
    name = models.CharField(max_length=120)
    tier = models.PositiveIntegerField()
Run Code Online (Sandbox Code Playgroud)

我在django 网站上看到了这个示例,但是有必要向 JSON 中的每个项目添加一个非常长的属性模型

Django 网站的示例:

[
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    }
  }
]
Run Code Online (Sandbox Code Playgroud)

jde*_*ace 5

您可以创建自定义管理命令来导入自定义 JSON 文件。文档

import json
from django.core.management.base import BaseCommand
from myapp.models import Item

class Command(BaseCommand):

    def add_arguments(self, parser):
        parser.add_argument('json_file', type=str)

    def handle(self, *args, **options):
        with open(options['json_file']) as f:
            data_list = json.load(f)

        for data in data_list:
            data['pk'] = data.pop('key')
            Item.objects.get_or_create(pk=data['pk'], defaults=data)
Run Code Online (Sandbox Code Playgroud)