Ух, у меня такие тяжелые времена. Я должен делать что-то не так, я получаю невероятное количество запросов.
Итак, мои модели следующие:
игрок
клан
Матч (как в игровом матче)
MatchMap (карты, сыгранные в матче)
MatchPlayer (игроки матча)
Все они связаны через внешний ключ, без отношения m2m. Игрок может быть в клане, а в матче участвуют 2 клана. В матче может быть любое количество карт, и в матче могут участвовать только игроки из двух участвующих кланов (хотя в будущем игроки могут быть не в том же клане, в котором они играли в этом матче, поэтому я указываю сторону, в которой они играли матч).
Итак, я отправил матч, все в порядке. Но редактировать эту информацию, это случай!
Для редактирования 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'}))
В любом случае, я мог бы иметь это в формуляре для редактирования? Я не могу найти способ отправить список игроков клана и правильных игроков матча в форму.
Спасибо