kinda stuck trying to harmonize bench and lineup

This commit is contained in:
2021-11-18 08:57:40 -06:00
parent 6181982613
commit e5019c36dc
3 changed files with 49 additions and 42 deletions

View File

@@ -2,24 +2,26 @@ from django import forms
from .models import Positioning from .models import Positioning
from events.models import Event from events.models import Event
from players.models import Player 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 from crispy_forms.helper import FormHelper, Layout
class PositioningForm(forms.ModelForm): class PositioningForm(forms.ModelForm):
available = forms.TextInput()
class Meta: class Meta:
model = Positioning model = Positioning
widgets = { widgets = {
'order': forms.NumberInput(attrs={'class':'w-100'}), 'order': forms.NumberInput(attrs={'class':'w-100'}),
# 'player': forms.Select(attrs={'class': 'form-control'}), # 'player': forms.Select(attrs={'class': 'form-control'}),
'position': forms.Select(attrs={'class': 'w-100'}), 'position': forms.Select(attrs={'class': 'w-100'}),
'ordering': forms.NumberInput(attrs={'class':'w-100'}) # 'ordering': forms.NumberInput(attrs={'class':'w-100'})
} }
exclude = () exclude = ()
PositioningFormSet = modelformset_factory( PositioningFormSet = modelformset_factory(
model=Positioning, model=Positioning,
form=PositioningForm, form=PositioningForm,
fields = ['player', 'position', 'order'], # fields=['order', 'position','player'],
min_num=9, min_num=9,
can_order=True can_order=True
) )

View File

@@ -7,14 +7,10 @@
{{ event.venue.name }} <br> {{ event.venue.name }} <br>
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<form action="{% url 'edit lineup' event_id=event.id%}" method="post">
<div class="col-md-6"> <div class="col-md-6">
<h5>Lineup</h5> <h5>Lineup</h5>
{# <ul class="list-group">#}
<form action="{% url 'edit lineup' event_id=event.id%}" method="post">
{% csrf_token %}
{{ positionings_formset.management_form }}
{# {% for pos in positionings_formset %}#}
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
@@ -24,20 +20,21 @@
</tr> </tr>
</thead> </thead>
<tbody id="lineup"> <tbody id="lineup">
{% for player in positionings_players_initial|dictsort:"positioning.order" %} {#{% for player in positionings_players_initial|dictsort:"positioning.order" %}#}
{% if player.positioning %} {% csrf_token %}
{{ formset_starting.management_form }}
{% for form in formset_starting %}
<tr data-player-id="{{ player.id }}", <tr data-player-id="{{ player.id }}",
data-positioning-position="{{ player.positioning.position }}" data-positioning-position="{{ form.instance.player.positioning.position }}"
> >
{# <th scope="row">{{ form.order }}</th>#} {# <th scope="row">{{ form.order }}</th>#}
{# <td>{{ form.player }}</td>#} {# <td>{{ form.player }}</td>#}
{# <td>{{ form.position }}</td>#} {# <td>{{ form.position }}</td>#}
<th scope="row">{% if player.positioning.order %}{{ player.positioning.order }}{% endif %}</th> <th scope="row">{% if form.instance.order %}{{ form.instance.order }}{% endif %}</th>
<th>{{ player.first_name }} {{ player.last_name }}</th> <th>{{ form.instance.player.first_name }} {{ form.instance.player.last_name }}</th>
<td>{{ player.positioning.position }}</td> <td>{{ form.instance.position }}</td>
</tr> </tr>
{% endif %}
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
@@ -57,23 +54,23 @@
<th scope="col">Statline</th> <th scope="col">Statline</th>
</tr> </tr>
<tbody id="bench"> <tbody id="bench">
{% for player in players %} {% for form in formset_bench %}
{% if not player.positioning %} {% if not player.positioning.order and not player.positioning.position == "P" %}
<tr data-player-id="{{ player.id }}"> <tr data-player-id="{{ pos.player.id }}">
<td> <td>
{% if player.availability.available == 2 %} {% if pos.player.availability.available == 2 %}
<img class="bg-success p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">Yes</span></img> <img class="bg-success p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">Yes</span></img>
{% elif player.availability.available == 1%} {% elif pos.player.availability.available == 1%}
<img class="bg-info p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">Maybe</span></span> <img class="bg-info p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">Maybe</span></span>
{% elif player.availability.available == 0%} {% elif pos.player.availability.available == 0%}
<img class="bg-danger p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">No</span></span> <img class="bg-danger p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">No</span></span>
{% elif player.availability.available == -1%} {% elif pos.player.availability.available == -1%}
<img class="bg-secondary p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">Unknown</span></span> <img class="bg-secondary p-2 rounded-circle" width="5" height="5"><span class="visually-hidden">Unknown</span></span>
{% endif %} {% endif %}
</td> </td>
<th><span class="d-none d-md-block" id="player-name-{{ player.id }}">{{ player.first_name }}</span> {{ player.last_name }}</th> <th><span class="d-none d-md-block" id="player-name-{{ form.instance.player.id }}">{{ form.instance.player.first_name }}</span> {{ form.instance.player.last_name }}</th>
<td id="player-jersey-number-{{ player.id }}">{{ player.jersey_number }} </td> <td id="player-jersey-number-{{ form.instance.player.id }}">{{ form.instance.player.jersey_number }} </td>
<td id="player-statline-{{ player.id }}"><code>{{ player.statline}}</code></td> <td id="player-statline-{{ form.instance.player.player.id }}"><code>{{ form.instance.player.statline}}</code></td>
</tr> </tr>
{% endif %} {% endif %}
{% endfor %} {% endfor %}

View File

@@ -4,6 +4,7 @@ from .forms import PositioningFormSet
from events.models import Event from events.models import Event
from players.models import Player from players.models import Player
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from django.db.models import Q
# Create your views here. # Create your views here.
def edit(request, event_id): def edit(request, event_id):
@@ -30,24 +31,31 @@ def edit(request, event_id):
# return render(request, 'success.html', {'call_back':'schedule'}) # return render(request, 'success.html', {'call_back':'schedule'})
event = Event.objects.get(id=event_id) event = Event.objects.get(id=event_id)
players = Player.objects.all().prefetch_related('availability_set', 'statline_set', 'positioning_set') players = Player.objects.all().prefetch_related('availability_set', 'statline_set', 'positioning_set')
players = [ players_info = { player.id:{
{ 'availability': player.availability_set.get(event_id=event_id),
**model_to_dict(player), 'statline': player.statline_set.get(player_id=player.id),
'availability':player.availability_set.get(event_id=event_id), **model_to_dict(player)
# '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()
}
for player in players 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) qset = Positioning.objects.filter(event_id=event_id)
formset = PositioningFormSet(queryset=qset) formset = PositioningFormSet(queryset=qset)
for form in formset: pass
for field in form.fields: formset_starting = PositioningFormSet(
field 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', return render(request, 'lineups/lineup.html', {'title': 'Lineup',
'event': event, 'event': event,
'players': players, 'players_info': players_info,
'positionings_players_initial':[player for player in players if player['positioning']], # 'players': players_d,
'positionings_formset':formset}) # 'positionings_players_initial':[player for player in players if player['positioning']],
'formset_starting':formset_starting,
'formset_bench':formset_bench
})