Ввод данных Json в модели django

У меня есть json-файл с огромным количеством данных в нем, я также создал django-модель для хранения этих данных, и теперь я не могу понять, как поместить эти json-данные в мои модели. Если делать это вручную, то это отнимет у меня много времени.
Однако я могу использовать models.JSONField для размещения этих данных, но это не то, что мне нужно. Я хочу поместить все данные в поле модели.
Вот пример моих JSON-данных:

[
    {
        "end_year": "",
        "intensity": 6,
        "sector": "Energy",
        "topic": "gas",
        "insight": "Annual Energy Outlook",
        "url": "http://example.com",
        "region": "Northern America",
        "start_year": "",
        "impact": "",
        "added": "January, 20 2017 03:51:25",
        "published": "January, 09 2017 00:00:00",
        "country": "United States of America",
        "relevance": 2,
        "pestle": "Industries",
        "source": "EIA",
        "title": "Test phase",
        "likelihood": 3
    }
]

А это моя модель:

class myModel(models.Model):
    end_year = models.PositiveIntegerField(null=True, blank=True)
    intensity = models.PositiveSmallIntegerField(null=True, blank=True)
    sector = models.CharField(max_length = 255, null=True, blank=True)
    topic = models.CharField(max_length = 55, null=True, blank=True)
    insight = models.TextField()
    url = models.URLField(max_length = 300)
    region = models.CharField(max_length = 50, null=True, blank=True)
    start_year = models.PositiveIntegerField(null=True, blank=True)
    impact = models.CharField(max_length = 255, null=True, blank=True)
    added = models.DateTimeField(null=True, blank=True)
    published = models.DateTimeField(null=True, blank=True)
    country = models.CharField(max_length = 50, null=True, blank=True)
    relevance = models.PositiveIntegerField(null=True, blank=True)
    pestle = models.CharField(max_length = 100, null=True, blank=True)
    source = models.CharField(max_length = 200, null=True, blank=True)
    title = models.CharField(max_length = 300, null=True, blank=True)
    likelihood = models.PositiveIntegerField(null=True, blank=True)

Вы можете сделать что-то вроде следующего, пожалуйста, скорректируйте поле, если требуется:

import json
from myapp.models import myModel
from django.utils.dateparse import parse_datetime

def populate_database(json_file_path):
    with open(json_file_path, 'r') as file:
        data = json.load(file)

    # Bulk create instances to minimize database queries
    instances_to_create = []
    for item in data:
        instance = myModel(
            end_year=item.get('end_year'),
            intensity=item.get('intensity'),
            sector=item.get('sector'),
            topic=item.get('topic'),
            insight=item.get('insight'),
            url=item.get('url'),
            region=item.get('region'),
            start_year=item.get('start_year'),
            impact=item.get('impact'),
            added=parse_datetime(item.get('added')),
            published=parse_datetime(item.get('published')),
            country=item.get('country'),
            relevance=item.get('relevance'),
            pestle=item.get('pestle'),
            source=item.get('source'),
            title=item.get('title'),
            likelihood=item.get('likelihood'),
        )
        instances_to_create.append(instance)

    myModel.objects.bulk_create(instances_to_create)

# call it where required
populate_database('path_to_your_json_file.json')
Вернуться на верх