musik/game/forms.py

61 lines
1.9 KiB
Python

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,
)