diff --git a/lineups/forms.py b/lineups/forms.py index 6ebadcb..33f59f6 100644 --- a/lineups/forms.py +++ b/lineups/forms.py @@ -1,13 +1,26 @@ from django import forms from .models import Positioning -from django.forms import modelformset_factory +from events.models import Event +from players.models import Player +from django.forms import modelformset_factory, inlineformset_factory, NumberInput from crispy_forms.helper import FormHelper, Layout -PositioningFormSet = modelformset_factory(model=Positioning, - fields = ['player', 'position', 'order'], +class PositioningForm(forms.ModelForm): + class Meta: + model = Positioning widgets = { - 'order':forms.NumberInput(attrs={'style':'width:6ch'}) - }) + 'order': forms.NumberInput(attrs={'class':'input-group-text w-25'}), + 'player': forms.Select(attrs={'class': 'form-control'}), + 'position': forms.Select(attrs={'class': 'input-group-text w-25'}) + } + exclude = () + +PositioningFormSet = modelformset_factory( + model=Positioning, + form=PositioningForm, + fields = ['player', 'position', 'order'], + min_num=9 +) # class PositioningFormSet(modelformset_factory): # class Meta: diff --git a/lineups/models.py b/lineups/models.py index 88dcf8e..36c0938 100644 --- a/lineups/models.py +++ b/lineups/models.py @@ -2,6 +2,7 @@ from django.db import models from players.models import Player from events.models import Event # Create your models here. + class Positioning(models.Model): player = models.ForeignKey(Player, on_delete=models.CASCADE) event = models.ForeignKey(Event, on_delete=models.CASCADE) diff --git a/lineups/templates/lineups/lineup.html b/lineups/templates/lineups/lineup.html index e4f4f8a..51215f0 100644 --- a/lineups/templates/lineups/lineup.html +++ b/lineups/templates/lineups/lineup.html @@ -14,18 +14,11 @@ {% csrf_token %} {{ positionings_formset.management_form }} {% for pos in positionings_formset %} -
-
-
- {{ pos.order }} -
-
- {{ pos.player }} -
-
- {{ pos.position }} -
-
+
+ {{ pos.id }} + {{ pos.order }} + {{ pos.player }} + {{ pos.position }}
{% endfor %} diff --git a/lineups/views.py b/lineups/views.py index 46544e3..4740967 100644 --- a/lineups/views.py +++ b/lineups/views.py @@ -18,13 +18,16 @@ def edit(request, id): # process the data in form.cleaned_data as required # ... # redirect to a new URL: - new_event, did_create = Positioning.objects.update_or_create(player_id=form['player'].data, event_id=id, defaults=form.cleaned_data) - print (form.cleaned_data) + form.cleaned_data.pop('id') #FIXME this is a workaround, not sure why it is necessary + new_positioning, did_create = Positioning.objects.update_or_create(id=form['id'].data, defaults=form.cleaned_data) # return render(request, 'success.html', {'call_back':'schedule'}) event = Event.objects.get(id=id) players = Player.objects.all() qset = Positioning.objects.filter(event_id=id, order__isnull = False) formset = PositioningFormSet(queryset=qset) + for form in formset: + for field in form.fields: + field return render(request, 'lineups/lineup.html', {'title': 'Lineup', 'event': event, 'players': players,