From e5019c36dc9c8dccd09918059c0fa1d8fa920046 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 18 Nov 2021 08:57:40 -0600 Subject: [PATCH] kinda stuck trying to harmonize bench and lineup --- lineups/forms.py | 8 +++-- lineups/templates/lineups/lineup.html | 43 +++++++++++++-------------- lineups/views.py | 40 +++++++++++++++---------- 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/lineups/forms.py b/lineups/forms.py index ef91bb6..07bb9f1 100644 --- a/lineups/forms.py +++ b/lineups/forms.py @@ -2,24 +2,26 @@ from django import forms from .models import Positioning from events.models import Event from players.models import Player -from django.forms import modelformset_factory, inlineformset_factory, BaseModelFormSet +from django.forms import modelformset_factory, inlineformset_factory, BaseModelFormSet,formset_factory from crispy_forms.helper import FormHelper, Layout class PositioningForm(forms.ModelForm): + available = forms.TextInput() + class Meta: model = Positioning widgets = { 'order': forms.NumberInput(attrs={'class':'w-100'}), # 'player': forms.Select(attrs={'class': 'form-control'}), 'position': forms.Select(attrs={'class': 'w-100'}), - 'ordering': forms.NumberInput(attrs={'class':'w-100'}) + # 'ordering': forms.NumberInput(attrs={'class':'w-100'}) } exclude = () PositioningFormSet = modelformset_factory( model=Positioning, form=PositioningForm, - fields = ['player', 'position', 'order'], + # fields=['order', 'position','player'], min_num=9, can_order=True ) diff --git a/lineups/templates/lineups/lineup.html b/lineups/templates/lineups/lineup.html index 1f9fe1b..c756a72 100644 --- a/lineups/templates/lineups/lineup.html +++ b/lineups/templates/lineups/lineup.html @@ -7,14 +7,10 @@ {{ event.venue.name }}
+
+
Lineup
- {#
    #} - - - {% csrf_token %} - {{ positionings_formset.management_form }} - {# {% for pos in positionings_formset %}#} @@ -24,20 +20,21 @@ - {% for player in positionings_players_initial|dictsort:"positioning.order" %} - {% if player.positioning %} + {#{% for player in positionings_players_initial|dictsort:"positioning.order" %}#} + {% csrf_token %} + {{ formset_starting.management_form }} + {% for form in formset_starting %} {# #} {# #} {# #} - - - + + + - {% endif %} {% endfor %}
    {{ form.order }}{{ form.player }}{{ form.position }}{% if player.positioning.order %}{{ player.positioning.order }}{% endif %}{{ player.first_name }} {{ player.last_name }}{{ player.positioning.position }}{% if form.instance.order %}{{ form.instance.order }}{% endif %}{{ form.instance.player.first_name }} {{ form.instance.player.last_name }}{{ form.instance.position }}
    @@ -57,23 +54,23 @@ Statline - {% for player in players %} - {% if not player.positioning %} - + {% for form in formset_bench %} + {% if not player.positioning.order and not player.positioning.position == "P" %} + - {% if player.availability.available == 2 %} + {% if pos.player.availability.available == 2 %} Yes - {% elif player.availability.available == 1%} + {% elif pos.player.availability.available == 1%} Maybe - {% elif player.availability.available == 0%} + {% elif pos.player.availability.available == 0%} No - {% elif player.availability.available == -1%} + {% elif pos.player.availability.available == -1%} Unknown {% endif %} - {{ player.first_name }} {{ player.last_name }} - {{ player.jersey_number }} - {{ player.statline}} + {{ form.instance.player.first_name }} {{ form.instance.player.last_name }} + {{ form.instance.player.jersey_number }} + {{ form.instance.player.statline}} {% endif %} {% endfor %} diff --git a/lineups/views.py b/lineups/views.py index 20f235a..84a4fda 100644 --- a/lineups/views.py +++ b/lineups/views.py @@ -4,6 +4,7 @@ from .forms import PositioningFormSet from events.models import Event from players.models import Player from django.forms.models import model_to_dict +from django.db.models import Q # Create your views here. def edit(request, event_id): @@ -30,24 +31,31 @@ def edit(request, event_id): # return render(request, 'success.html', {'call_back':'schedule'}) event = Event.objects.get(id=event_id) players = Player.objects.all().prefetch_related('availability_set', 'statline_set', 'positioning_set') - players = [ - { - **model_to_dict(player), - 'availability':player.availability_set.get(event_id=event_id), - # 'available_value': player.availability_set.get(event_id=event_id).available, - 'statline': player.statline_set.get(player_id=player.id), - 'positioning': player.positioning_set.filter(event_id=event_id).first() - } + players_info = { player.id:{ + 'availability': player.availability_set.get(event_id=event_id), + 'statline': player.statline_set.get(player_id=player.id), + **model_to_dict(player) + } for player in players - ] - players.sort(key=lambda d: (-d['availability'].available, d['last_name'])) + } + # players_d.sort(key=lambda d: (-d['availability'].available, d['last_name'])) + + players_with_positioning = [i.player for i in Positioning.objects.filter(event_id=event_id)] + players_without_positioning = [i for i in players if i not in players_with_positioning] + Positioning.objects.bulk_create([Positioning(event_id=event_id, player=player) for player in players_without_positioning]) qset = Positioning.objects.filter(event_id=event_id) formset = PositioningFormSet(queryset=qset) - for form in formset: - for field in form.fields: - field + pass + formset_starting = PositioningFormSet( + queryset=Positioning.objects.exclude(order__isnull=True).filter(event_id=event_id)) + formset_bench = PositioningFormSet( + queryset=Positioning.objects.exclude(order__isnull=False).filter(event_id=event_id)) + return render(request, 'lineups/lineup.html', {'title': 'Lineup', 'event': event, - 'players': players, - 'positionings_players_initial':[player for player in players if player['positioning']], - 'positionings_formset':formset}) \ No newline at end of file + 'players_info': players_info, + # 'players': players_d, + # 'positionings_players_initial':[player for player in players if player['positioning']], + 'formset_starting':formset_starting, + 'formset_bench':formset_bench + }) \ No newline at end of file