Django:将外部API中的数据映射到模型中?

时间:2013-11-16 14:52:29

标签: python django json api rest

我从各种外部API中提取一些JSON数据。他们的数据结构可能如下:

"game": {
    "title": "Super Mario Bros. 3",
    "release": "1989",
    "players": 3,
    ..
}

但是,我想通过这个模型直接将它存储在我的数据库中:

class Game(models.Model):
    name = models.CharField()
    debut = models.DateField()
    max_players = models.IntegerField()

正如您所知,JSON属性与模型的属性不匹配。

是否有一种干净的方法来映射每个属性以轻松导入此数据?是否有可能通过django的反序列化模块来做到这一点?或者我需要创建自己的东西吗?

2 个答案:

答案 0 :(得分:10)

您可以创建classmethod(或将其放在模型管理器https://docs.djangoproject.com/en/dev/ref/models/instances/#creating-objects中):

class Game(models.Model):
    name = models.CharField()
    debut = models.DateField()
    max_players = models.IntegerField()

    @classmethod
    def create_from_j(cls, game): # assumed that game is dict already
        j2m = {'title': 'name', 'release': 'debut', 'players': 'max_players'}
        return cls(**{j2m[k]:v for k,v in game.items()})

只需调用此方法,然后您需要从json数据创建一个游戏:

game = Game.create_from_j(json.loads(json_game))

答案 1 :(得分:0)

我认为最简单的方法是使用python编写脚本。 你可能需要json模块来处理你得到的数据,转换为python对象。

然后,使用Game.objects.create()循环json,将数据插入数据库