【发布时间】:2010-12-29 14:51:10
【问题描述】:
哇,我在这方面遇到了困难。我一定做错了什么,我收到了大量的查询。
所以,我的模型如下: 播放器 氏族 比赛(如游戏比赛) MatchMap(比赛的地图) MatchPlayer(比赛的球员)
它们都是通过外键关联的,没有m2m关系。一个玩家可以加入一个氏族,一场比赛涉及 2 个氏族。一场比赛可以有任意数量的地图,并且只有来自所涉及的两个氏族的玩家可以参加比赛(尽管将来玩家可能不在他们在那场比赛中效力的同一个氏族,所以我指定他们在匹配)。
所以,我进行了提交匹配,一切正常。但是要编辑此信息,这是caos!
为了编辑比赛的 MatchPlayers,我尝试使用 inlineformset_factory
PlayersFormSet = inlineformset_factory(MatchBetweenClans, MatchPlayer)
playersForms = PlayersFormSet(instance=match)
这已经开始很糟糕了,因为对于比赛中的每个玩家实例,Django 都会访问数据库并获取所有玩家的列表。例如,如果有 6 名球员参加比赛,我有 2 个由 inlineformset_factory 提供的空表格,我会在日志中看到
SELECT
...
FROM
`accounts_customuser`
8 次。
现在,即使这对我来说工作正常,它也不能满足我的需要。将玩家添加到比赛时,并非所有玩家都应该在列表中,只有来自 2 个指定氏族的玩家,最好是复选框的形式(每个复选框都是一个氏族的玩家)。提交比赛时,这很容易做到:
clan1PlayerList = CustomUser.objects.filter(clan=clan1Instance)
clan2PlayerList = CustomUser.objects.filter(clan=clan2Instance)
playersClan1 = forms.ModelMultipleChoiceField(queryset=clan1PlayerList, label="Jogadores - "+clan1Instance.tag+"", widget=forms.CheckboxSelectMultiple(attrs={'class':'input_checkbox'}))
playersClan2 = forms.ModelMultipleChoiceField(queryset=clan2PlayerList, label="Jogadores - "+clan2Instance.tag, widget=forms.CheckboxSelectMultiple(attrs={'class':'input_checkbox'}))
无论如何我可以在要编辑的处方集上使用它吗?我找不到将氏族的玩家列表和比赛的当前玩家发送到表格的方法。 谢谢
【问题讨论】:
-
如果您发布了模型而不是对它们的文字描述,您的问题会更容易阅读。不抱怨,只是我的看法。 :-)
标签: django forms django-models