Add game management features: create MusikGame model, implement game creation and detail views, and update group detail template
This commit is contained in:
parent
19e6eb32c8
commit
f7baa91132
10 changed files with 275 additions and 2 deletions
|
@ -1,3 +1,5 @@
|
|||
import random
|
||||
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.db.models import Count, Q
|
||||
from django.http import JsonResponse
|
||||
|
@ -88,3 +90,50 @@ class GroupRemoveMusicView(OwnerFilterMixin, SingleObjectMixin, View):
|
|||
group = music.group
|
||||
music.delete()
|
||||
return redirect(group)
|
||||
|
||||
|
||||
class GameCreateView(LoginRequiredMixin, CreateView):
|
||||
model = models.MusikGame
|
||||
form_class = forms.MusikGameForm
|
||||
|
||||
def get_form_kwargs(self):
|
||||
kwargs = super().get_form_kwargs()
|
||||
kwargs["group"] = self.kwargs["pk"]
|
||||
return kwargs
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
data = super().get_context_data(**kwargs)
|
||||
data["group"] = models.Group.objects.filter(owner=self.request.user).get(
|
||||
pk=self.kwargs["pk"]
|
||||
)
|
||||
return data
|
||||
|
||||
def form_valid(self, form):
|
||||
group = models.Group.objects.get(pk=self.kwargs["pk"])
|
||||
form.instance.group = group
|
||||
res = super().form_valid(form)
|
||||
players = []
|
||||
musics = []
|
||||
for player in form.instance.players.all():
|
||||
players += 2 * [player]
|
||||
musics += random.sample(
|
||||
list(
|
||||
player.musicvideo_set.filter(group=group, blacklisted=False).all()
|
||||
),
|
||||
form.instance.n,
|
||||
)
|
||||
|
||||
pm_list = list(zip(players, musics))
|
||||
random.shuffle(pm_list)
|
||||
for (player, music), order in zip(pm_list, range(len(pm_list))):
|
||||
models.MusicGameOrder.objects.create(
|
||||
game=form.instance, player=player, music_video=music, order=order
|
||||
)
|
||||
return res
|
||||
|
||||
|
||||
class GameDetailView(LoginRequiredMixin, DetailView):
|
||||
model = models.MusikGame
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().filter(group__owner=self.request.user)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue