Почему я получаю TypeError строковые индексы должны быть целыми числами в этом вызове API? (посев Django DB)

Я пытаюсь посеять django DB из внешнего API, используя это руководство (https://medium.com/@chilinski.a/how-to-seed-a-django-api-with-data-from-an-external-api-b577b6e6ad54).

Я точно воспроизвел код для своего собственного проекта, я думаю, но получаю TypeError при запуске python manage.py seed и не уверен, почему. Вот сообщение об ошибке:

File "...nrel/nrel_app/management/commands/seed.py", line 15, in seed_nrel utility_name = i["utility_name"], TypeError: индексы строк должны быть целыми числами

Вот мой код:

import requests
from django.core.management.base import BaseCommand
from nrel_app.models import Nrel


def get_nrel():
    url = 'https://developer.nrel.gov/api/utility_rates/v3.json?api_key=DEMO_KEY&lat=35.45&lon=-82.98'
    r = requests.get(url, headers={'Content=Type': 'nrel_app/json'})
    Nrels = r.json()
    return Nrels

def seed_nrel():
    for i in get_nrel():
            Nrels = Nrel(
                utility_name = i['utility_name'],
                company_id = i['company_id'],
                utility_info =i['utility_info'],
                residential = i['residential'],
                commercial = i['commercial'],
                industrial = i['industrial'],
            )
            Nrels.save()

class Command(BaseCommand):
    def handle(self, *args, **options):
        seed_nrel()
        print("Completed.")

Вот json, запрашиваемый с nrel api:

{"inputs":{"lat":"35.45","lon":"-82.98"},"errors":[],"warnings":[],"version":"3.1. 0", "metadata":{"sources":["Ventyx Research (2012)"]}, "outputs":{"company_id": "8333|18642", "utility_name": "Haywood Electric Member Corp|Tennessee Valley Authority", "utility_info": [{"company_id": "8333", "utility_name": "Haywood Electric Member Corp"}, {"company_id": "18642", "utility_name": "Tennessee Valley Authority"}], "commercial":0. 0977,"industrial":0.0862,"residential":0.123}}

Думаю, вам следует убрать цикл for и получить результат из объекта, возвращаемого методом get_nrel() напрямую:

def seed_nrel():
     i = get_nrel()['options']
     Nrels = Nrel(
          utility_name = i['utility_name'],
          company_id = i['company_id'],
          utility_info =i['utility_info'],
          residential = i['residential'],
          commercial = i['commercial'],
          industrial = i['industrial'],
     )
     Nrels.save()
Вернуться на верх