如何在Django SQL DB中存储具有FK的dict类型对象的可变长度列表

时间:2014-04-16 22:14:14

标签: python sql django

假设我正在以...格式获得一些JSON。

"fellowPlayers": [
            {
               "championId": 110,
               "teamId": 100,
               "summonerId": 34258805
            },
            {
               "championId": 9,
               "teamId": 200,
               "summonerId": 19923759
            },
           ...
]

...可以有一个变量#条目,但总是那3个属性,其中2个应该映射到其他表(championId和summonerId),我怎么想在Django中定义一个表/模型来做这个?

如果无法直接完成,您会如何建议处理这种情况?我最初的想法是根据我期望的最大条目数(大约11个)在#字段中进行硬编码,但这种方法似乎可以在很多方面得到改进,尽管11在术语方面也不是太糟糕硬编码。

澄清并提供更多背景信息:我有一个模型可以跟踪游戏中的历史匹配数据。这包括大量特定于匹配的细节,例如获得的积分,杀戮等。championIdsummonerId指的是用于比赛的游戏中角色以及使用所述角色的玩家分别匹配。团队ID(全局常量)只有2个可能的值,这些值与任何其他表无关。 championIdsummonerId将分别与跟踪冠军和玩家的表格相关联。

我遇到的问题在于模型(让我们称之为MatchHistory模型存储单个匹配的统计数据),实际上“包含”fellowPlayers的列表,因为游戏可以有一个变量#中的玩家数量,从1到12.因此,对于任何给定的匹配,我可以获得一堆已知大小的匹配统计字段,这些字段可以处理,但我不知道在考虑时如何组织它未知的玩家数量,并将他们的信息与此模型相关联。

我在寻找这个问题的解决方案时偶然发现https://groups.google.com/forum/#!searchin/django-users/storing$20lists$20model/django-users/iOQs7qNfqBI/GuS5IlJ4qpUJ,看起来我想要做的事情并不是SQL真正支持的,因为它类似于在SQL中存储可变长度列表。 也许有人可以详细说明这种“不兼容性”,以便我可以确定它是否适用于我正在做的事情。

如果需要更多信息,请发表评论。

1 个答案:

答案 0 :(得分:1)

这是Many-to-one relation

class FellowPlayer(models.Model):
    champion = models.ForeignKey('Champion')
    team_id = models.IntegerField(unique=True)
    summoner = models.ForeignKey('Summoner')

    match_history = models.ForeignKey('MatchHistory')

class Summoner(models.Model):
    match_history = models.ForeignKey('MatchHistory')


class Champion(models.Model):
    match_history = models.ForeignKey('MatchHistory')


class MatchHistory(models.Model):
    pass

然后你会向后查询。例如:

# select all the fellow players objects who belong to other model with pk=1
FellowPlayer.objects.filter(match_history__pk=1)

您可以在该链接中找到更多示例。