from django import forms from . import models class GroupForm(forms.ModelForm): class Meta: model = models.Group fields = ["name"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["name"].widget.attrs["placeholder"] = self.fields["name"].label class GroupAddMembersForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["members"].queryset = self.fields["members"].queryset.exclude( id=self.instance.owner.id ) class Meta: model = models.Group fields = ["members"] class MusikGameForm(forms.ModelForm): class Meta: model = models.MusikGame fields = ["players", "n"] widgets = { "players": forms.CheckboxSelectMultiple, } def __init__(self, *args, **kwargs): group = models.Group.objects.get(pk=kwargs.pop("group", None)) players = group.members.all() | models.User.objects.filter(id=group.owner.id) kwargs["initial"].setdefault("players", players) super().__init__(*args, **kwargs) self.fields["players"].queryset = players class AnswerForm(forms.Form): def __init__(self, *args, **kwargs): game = kwargs.pop("game") user = kwargs.pop("user") super().__init__(*args, **kwargs) for music in game.musicgameorder_set.all(): self.fields[f"answer-{music.order}"] = forms.ChoiceField( choices=[("", "")] + list(game.players.all().values_list("id", "username")), required=False, label=music.order, initial=ma.answer.id if (ma := music.musicgameanswer_set.filter(player=user).first()) and ma.answer else "", disabled=game.over, )