kinda stuck trying to harmonize bench and lineup
This commit is contained in:
@@ -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
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,14 +7,10 @@
|
|||||||
{{ event.venue.name }} <br>
|
{{ event.venue.name }} <br>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
|
||||||
<h5>Lineup</h5>
|
|
||||||
{# <ul class="list-group">#}
|
|
||||||
<form action="{% url 'edit lineup' event_id=event.id%}" method="post">
|
<form action="{% url 'edit lineup' event_id=event.id%}" method="post">
|
||||||
|
|
||||||
{% csrf_token %}
|
<div class="col-md-6">
|
||||||
{{ positionings_formset.management_form }}
|
<h5>Lineup</h5>
|
||||||
{# {% 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 %}
|
||||||
|
|||||||
@@ -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),
|
|
||||||
'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),
|
'statline': player.statline_set.get(player_id=player.id),
|
||||||
'positioning': player.positioning_set.filter(event_id=event_id).first()
|
**model_to_dict(player)
|
||||||
}
|
}
|
||||||
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
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user