Если ответы, которые вы получаете от использования API Google, содержат разные атрибуты в каждом запросе, и вы хотите сохранить их все, тогда вам нужно использовать JSONField
:
from django.db import models
from django.core.serializers.json import DjangoJSONEncoder
import json
class JSONField(models.TextField):
"""
JSONField es un campo TextField que serializa/deserializa objetos JSON.
Django snippet #1478
Ejemplo:
class Page(models.Model):
data = JSONField(blank=True, null=True)
page = Page.objects.get(pk=5)
page.data = {'title': 'test', 'type': 3}
page.save()
"""
def to_python(self, value):
if value == "":
return None
try:
if isinstance(value, str):
return json.loads(value)
except ValueError:
pass
return value
def from_db_value(self, value, *args):
return self.to_python(value)
def get_db_prep_save(self, value, *args, **kwargs):
if value == "":
return None
if isinstance(value, dict):
value = json.dumps(value, cls=DjangoJSONEncoder)
return value
В вашем models.py
:
class Book(Model.models):
info = JSONField(null=True, blank=True)
...
В вашем views.py
:
...
book.info = json.loads(r.content)
book.save()
Но если вам нужно всегда сохранять одни и те же атрибуты, в вашем случае title
, description
, author_name
и genres
:
Book.objects.create(title = r['items'][0-2]['volumeInfo']['title'], description = r['items'][2]['volumeInfo']['description'], ......)