В Django почему возникает ошибка "TypeError at / string indices must be integers"?

Я пытаюсь научиться сохранять в Django часть json-контента, поступающего из kraken api. Просматривая несколько примеров здесь на stackoverflow, я пришел к такому коду:

views.py

from django.shortcuts import render
from meal_app.models import Kraken
import requests

def get_krakens(request):
    all_krakens = {}
    url ='https://api.kraken.com/0/public/Assets' 
    response = requests.get(url)
    data = response.json()

    
    for i in data:
        kraken_data = Kraken(
            name = i['altname']
            )
        kraken_data.save()
        all_krakens = Kraken.objects.all().order_by('-id')

    return render (request, 'krakens/kraken.html', { "all_krakens": 
    all_krakens} )

Когда я пытаюсь запустить, появляется: enter image description here

Как я могу решить эту ошибку? Мой json виден в консоли, но я не могу получить доступ к значению 'altname'. Ваша помощь будет очень признательна.

/Users/davidmoreira/Documents/crypto/djangokrakenapi/meal_project/meal_app/views.py, line 14, in get_krakens
            name = i['altname']

На iPad, поэтому не могу проверить, но я подозреваю, что ваш 'i' - это строка, и ее нужно преобразовать в объект/словарь Python, прежде чем вы сможете извлечь из нее подэлемент.

Посмотрите на метод json.loads в модуле json.

Ваш "i" имеет форму строки. Вам нужно сначала преобразовать ее в объект. Используя i = json.loads(i)

При переходе по словарю перебираются ключи, а не значения. Вы хотите:

for i in data.values():
from django.shortcuts import render
from meal_app.models import Kraken
import requests

def get_krakens(request):
    all_krakens = {}
    url ='https://api.kraken.com/0/public/Assets' 
    response = requests.get(url)
    data = response.json()

    
    for i in data:
        kraken_data = Kraken(
            name = data['result'][i]['altname']
            )
        kraken_data.save()
        all_krakens = Kraken.objects.all().order_by('-id')

    return render (request, 'krakens/kraken.html', { "all_krakens": 
    all_krakens} )
Вернуться на верх