Передача данных в sql

from django.shortcuts import render
import json
from .models import MyModel
import os


def display(request):
    json_file_path = os.path.join(os.path.dirname(__file__), '..', '..', './jsondata.json')
    try:
        with open(json_file_path, 'r') as f:
            data = json.load(f)
            for item in data:
                my_model_instance = MyModel(end_year=item['end_year'], intensity=item['intensity'],
                                            sector=item['sector'], topic=item['topic'], insight=item['insight'],
                                            url=item['url'], region=item['region'], start_year=item['start_year'],
                                            impact=item['impact'], added=item['added'], published=item['published'],
                                            country=item['country'], relevance=item['relevance'], pestle=item['pestle'],
                                            source=item['source'], title=item['title'], likelihood=item['likelihood'])
            my_model_instance.save()
    except FileNotFoundError:
        data = []

    template_name = 'display'
    return render(request, template_name, {'data': data})

я пытаюсь передать данные из json в sql с помощью django

Вы сохраняете элемент вне цикла for, поэтому сохраняется только последняя строка, так как в конце цикла my_model_instance будет указывать на последний созданный элемент.

Мы можем составить список элементов и использовать .bulk_create(…) [Django-doc] для добавления всех элементов в базу данных в одном запросе:

from django.shortcuts import render
import json
from .models import MyModel
import os

def display(request):
    json_file_path = os.path.join(
        os.path.dirname(__file__), '..', '..', './jsondata.json'
    )
    with open(json_file_path, 'r') as f:
        data = json.load(f)
        my_models = [
            MyModel(
                end_year=item['end_year'],
                intensity=item['intensity'],
                sector=item['sector'],
                topic=item['topic'],
                insight=item['insight'],
                url=item['url'],
                region=item['region'],
                start_year=item['start_year'],
                impact=item['impact'],
                added=item['added'],
                published=item['published'],
                country=item['country'],
                relevance=item['relevance'],
                pestle=item['pestle'],
                source=item['source'],
                title=item['title'],
                likelihood=item['likelihood'],
            )
            for item in data
        ]
        MyModel.objects.bulk_create(my_models)

    template_name = 'display'
    return render(request, template_name, {'data': data})
Вернуться на верх