假设我正在以...格式获得一些JSON。
"fellowPlayers": [
{
"championId": 110,
"teamId": 100,
"summonerId": 34258805
},
{
"championId": 9,
"teamId": 200,
"summonerId": 19923759
},
...
]
...可以有一个变量#条目,但总是那3个属性,其中2个应该映射到其他表(championId和summonerId),我怎么想在Django中定义一个表/模型来做这个?
如果无法直接完成,您会如何建议处理这种情况?我最初的想法是根据我期望的最大条目数(大约11个)在#字段中进行硬编码,但这种方法似乎可以在很多方面得到改进,尽管11在术语方面也不是太糟糕硬编码。
澄清并提供更多背景信息:我有一个模型可以跟踪游戏中的历史匹配数据。这包括大量特定于匹配的细节,例如获得的积分,杀戮等。championId
和summonerId
指的是用于比赛的游戏中角色以及使用所述角色的玩家分别匹配。团队ID(全局常量)只有2个可能的值,这些值与任何其他表无关。 championId
和summonerId
将分别与跟踪冠军和玩家的表格相关联。
我遇到的问题在于模型(让我们称之为MatchHistory
模型存储单个匹配的统计数据),实际上“包含”fellowPlayers
的列表,因为游戏可以有一个变量#中的玩家数量,从1到12.因此,对于任何给定的匹配,我可以获得一堆已知大小的匹配统计字段,这些字段可以处理,但我不知道在考虑时如何组织它未知的玩家数量,并将他们的信息与此模型相关联。
我在寻找这个问题的解决方案时偶然发现https://groups.google.com/forum/#!searchin/django-users/storing$20lists$20model/django-users/iOQs7qNfqBI/GuS5IlJ4qpUJ,看起来我想要做的事情并不是SQL真正支持的,因为它类似于在SQL中存储可变长度列表。 也许有人可以详细说明这种“不兼容性”,以便我可以确定它是否适用于我正在做的事情。
如果需要更多信息,请发表评论。
答案 0 :(得分:1)
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)
您可以在该链接中找到更多示例。