From 670350b256125510f76c455cd34aaae3d1b710ff Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 14:19:48 -0600 Subject: [PATCH 04/17] Removed duplicate key value in sample_players --- players/fixtures/sample_players.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/players/fixtures/sample_players.yaml b/players/fixtures/sample_players.yaml index 305ccb9..66890b8 100644 --- a/players/fixtures/sample_players.yaml +++ b/players/fixtures/sample_players.yaml @@ -5,7 +5,6 @@ last_name: Tosser jersey_number: 1 team: 1 - team: 1 - model: players.player pk: 2 fields: From ee44726ab7daf1386571533f5682d937fa07796e Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 15:17:52 -0600 Subject: [PATCH 05/17] fixed call_back for success in team edit --- events/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/events/views.py b/events/views.py index f10f598..092ad15 100644 --- a/events/views.py +++ b/events/views.py @@ -25,7 +25,7 @@ def edit(request, id=0): # ... # redirect to a new URL: new_event, did_create = Event.objects.update_or_create(pk=id, defaults=form.cleaned_data) - return render(request, 'success.html', {'call_back':'players list'}) + return render(request, 'success.html', {'call_back':'schedule'}) # if a GET (or any other method) we'll create a blank form else: From b5509bf26f11d314d9d9233b448ce49708b19dd8 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 15:21:03 -0600 Subject: [PATCH 06/17] Add Edit Lineup Button to schedule.html --- events/templates/events/schedule.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/events/templates/events/schedule.html b/events/templates/events/schedule.html index c35b59f..d7a96fd 100644 --- a/events/templates/events/schedule.html +++ b/events/templates/events/schedule.html @@ -1,4 +1,9 @@ -{% extends 'base.html' %}{% block title %} {{ title }} {% endblock %}{% block content %} + +{% extends 'base.html' %} + +{% block title %} {{ title }} {% endblock %} + +{% block content %}

{{ title }}

    From dabb94abc5dad647ebbeaebc365df40239ea9778 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 15:25:52 -0600 Subject: [PATCH 07/17] Bold and biggened event name --- events/templates/events/schedule.html | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/events/templates/events/schedule.html b/events/templates/events/schedule.html index f71dd16..dff2d79 100644 --- a/events/templates/events/schedule.html +++ b/events/templates/events/schedule.html @@ -1,15 +1,10 @@ - -{% extends 'base.html' %} - -{% block title %} {{ title }} {% endblock %} - -{% block content %} +{% extends 'base.html' %}{% block title %} {{ title }} {% endblock %}{% block content %}

    {{ title }}

      {% for event in events %} -
    1. - {{ event.away_team.name }} vs. {{ event.home_team.name }}
      +
    2. + {{ event.away_team.name }} vs. {{ event.home_team.name }}
      {{ event.start|date:"l, F j, Y g:i A" }}
      {{ event.venue.name }}
      Edit Event Details From a99c29f49b95323f7ca8724c2224007254dc10a0 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 15:31:01 -0600 Subject: [PATCH 08/17] added title/subtitle layout to list for teams and venues --- teams/views.py | 8 +++++++- venues/views.py | 13 ++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/teams/views.py b/teams/views.py index c114ebf..3476936 100644 --- a/teams/views.py +++ b/teams/views.py @@ -8,7 +8,13 @@ def root(request): def list(request): teams = Team.objects.all() - return render(request, 'list.html', {'title': "Teams", 'items': [(team.id, f"{team.name}") for team in teams], 'edit_url_name':'edit team'}) + return render(request, 'list.html', {'title': "Players", + 'items': [ + {'id':team.id, + 'title':f"{team.name}" + } + for team in teams], + 'edit_url_name': 'edit team'}) def edit(request, id=0): # if this is a POST request we need to process the form data diff --git a/venues/views.py b/venues/views.py index 9e09cb6..4458eb3 100644 --- a/venues/views.py +++ b/venues/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render, redirect, get_object_or_404 -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseBadRequest from .models import Venue from .forms import VenueForm @@ -8,7 +8,13 @@ def root(request): def list(request): venues = Venue.objects.all() - return render(request, 'list.html', {'title': "Venues", 'items': [(venue.id, f"{venue.name}") for venue in venues], 'edit_url_name': 'edit venue'}) + return render(request, 'list.html', {'title': "Venues", + 'items': [ + {'id':venue.id, + 'title':f"{venue.name}" + } + for venue in venues], + 'edit_url_name': 'edit venue'}) def edit(request, id=0): @@ -26,7 +32,8 @@ def edit(request, id=0): # ... # redirect to a new URL: new_venue, did_create = Venue.objects.update_or_create(pk=id, defaults=form.cleaned_data) - return render(request, 'success.html', {'call_back':'players list'}) + return render(request, 'success.html', {'call_back':'players list','id':new_venue.id}, status=201 if did_create else 200) + return HttpResponseBadRequest() # if a GET (or any other method) we'll create a blank form else: From 6e3901ab05d3daf1c4fd0eb51f87b47deac4a6f1 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 15:34:26 -0600 Subject: [PATCH 09/17] Created Lineup model, view, and template --- lineups/__init__.py | 0 lineups/admin.py | 3 +++ lineups/apps.py | 6 ++++++ lineups/migrations/__init__.py | 0 lineups/models.py | 3 +++ lineups/templates/lineups/lineup.html | 28 +++++++++++++++++++++++++++ lineups/tests.py | 3 +++ lineups/urls.py | 9 +++++++++ lineups/views.py | 11 +++++++++++ 9 files changed, 63 insertions(+) create mode 100644 lineups/__init__.py create mode 100644 lineups/admin.py create mode 100644 lineups/apps.py create mode 100644 lineups/migrations/__init__.py create mode 100644 lineups/models.py create mode 100644 lineups/templates/lineups/lineup.html create mode 100644 lineups/tests.py create mode 100644 lineups/urls.py create mode 100644 lineups/views.py diff --git a/lineups/__init__.py b/lineups/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lineups/admin.py b/lineups/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/lineups/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/lineups/apps.py b/lineups/apps.py new file mode 100644 index 0000000..757f8dd --- /dev/null +++ b/lineups/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class LineupsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'lineups' diff --git a/lineups/migrations/__init__.py b/lineups/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lineups/models.py b/lineups/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/lineups/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/lineups/templates/lineups/lineup.html b/lineups/templates/lineups/lineup.html new file mode 100644 index 0000000..74b2b0c --- /dev/null +++ b/lineups/templates/lineups/lineup.html @@ -0,0 +1,28 @@ +{% extends 'base.html' %}{% block title %} {{ title }} {% endblock %} + +{% block content %} +

      {{ title }}

      + {{ event.away_team.name }} vs. {{ event.home_team.name }}
      + {{ event.start|date:"l, F j, Y g:i A" }}
      + {{ event.venue.name }}
      +
      +
      +
      +
        + {% for li in lineup %} +
      • {{ l_i }}
      • + {% endfor %} +
      +
      + +
      +
        + {% for player in players %} +
      • {{ player.first_name }} {{ player.last_name }}
      • + {% endfor %} +
      +
      +
      +
      + +{% endblock %} \ No newline at end of file diff --git a/lineups/tests.py b/lineups/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/lineups/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/lineups/urls.py b/lineups/urls.py new file mode 100644 index 0000000..051c4a7 --- /dev/null +++ b/lineups/urls.py @@ -0,0 +1,9 @@ +from django.contrib import admin + +from django.urls import path, include + +from . import views + +urlpatterns = [ + path('edit/', views.edit, name="edit lineup"), +] \ No newline at end of file diff --git a/lineups/views.py b/lineups/views.py new file mode 100644 index 0000000..e38b3e0 --- /dev/null +++ b/lineups/views.py @@ -0,0 +1,11 @@ +from django.shortcuts import render +from django.http import HttpResponse +from events.models import Event +from players.models import Player + +# Create your views here. +def edit(request, id): + event = Event.objects.get(id=id) + players = Player.objects.all() + print(event) + return render(request, 'lineups/lineup.html', {'title': 'Lineup', 'event': event, 'players': players, 'lineup':[]}) \ No newline at end of file From 973986c0a9a46848a98a55f2f01e7ca72e3a9072 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 17:42:16 -0600 Subject: [PATCH 10/17] Move positioning to lineups app --- events/migrations/0003_delete_positioning.py | 16 +++++++++++ events/models.py | 22 -------------- lineups/migrations/0001_initial.py | 30 ++++++++++++++++++++ 3 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 events/migrations/0003_delete_positioning.py create mode 100644 lineups/migrations/0001_initial.py diff --git a/events/migrations/0003_delete_positioning.py b/events/migrations/0003_delete_positioning.py new file mode 100644 index 0000000..9f2e51c --- /dev/null +++ b/events/migrations/0003_delete_positioning.py @@ -0,0 +1,16 @@ +# Generated by Django 3.2.6 on 2021-11-11 03:14 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0002_alter_availability_options'), + ] + + operations = [ + migrations.DeleteModel( + name='Positioning', + ), + ] diff --git a/events/models.py b/events/models.py index 858d5e0..c474a33 100644 --- a/events/models.py +++ b/events/models.py @@ -30,27 +30,5 @@ class Availability(models.Model): unique_together = ('event', 'player',) verbose_name_plural = "availabilities" -class Positioning(models.Model): - player = models.ForeignKey(Player, on_delete=models.CASCADE) - event = models.ForeignKey(Event, on_delete=models.CASCADE) - positions = [ - ('P', 'P'), - ('C', 'C'), - ('1B', '1B'), - ('2B', '2B'), - ('3B', '3B'), - ('SS', 'SS'), - ('LF', 'LF'), - ('CF', 'CF'), - ('RF', 'RF'), - ('DH','DH'), - ('EH','EH') - ] - position = models.CharField(choices=positions, default=None, max_length=2, null=True) - order = models.IntegerField(default=None, null=True) - - class Meta: - unique_together = ('player', 'event',) - class Season(models.Model): name = models.CharField(max_length=50) \ No newline at end of file diff --git a/lineups/migrations/0001_initial.py b/lineups/migrations/0001_initial.py new file mode 100644 index 0000000..33385f1 --- /dev/null +++ b/lineups/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 3.2.6 on 2021-11-11 03:14 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('events', '0003_delete_positioning'), + ('players', '0003_player_team'), + ] + + operations = [ + migrations.CreateModel( + name='Positioning', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('position', models.CharField(choices=[('P', 'P'), ('C', 'C'), ('1B', '1B'), ('2B', '2B'), ('3B', '3B'), ('SS', 'SS'), ('LF', 'LF'), ('CF', 'CF'), ('RF', 'RF'), ('DH', 'DH'), ('EH', 'EH')], default=None, max_length=2, null=True)), + ('order', models.IntegerField(default=None, null=True)), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='events.event')), + ('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='players.player')), + ], + options={ + 'unique_together': {('player', 'event')}, + }, + ), + ] From 06ceeb11a954abd6e47353e0663b856a62562b82 Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 17:42:43 -0600 Subject: [PATCH 11/17] Added positioning to lineup view --- lineups/models.py | 24 +++++++++++++++++++++++- lineups/templates/lineups/lineup.html | 25 ++++++++++++++++++++----- lineups/views.py | 9 ++++++++- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/lineups/models.py b/lineups/models.py index 71a8362..88dcf8e 100644 --- a/lineups/models.py +++ b/lineups/models.py @@ -1,3 +1,25 @@ 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) + positions = [ + ('P', 'P'), + ('C', 'C'), + ('1B', '1B'), + ('2B', '2B'), + ('3B', '3B'), + ('SS', 'SS'), + ('LF', 'LF'), + ('CF', 'CF'), + ('RF', 'RF'), + ('DH','DH'), + ('EH','EH') + ] + position = models.CharField(choices=positions, default=None, max_length=2, null=True) + order = models.IntegerField(default=None, null=True) + + class Meta: + unique_together = ('player', 'event',) \ No newline at end of file diff --git a/lineups/templates/lineups/lineup.html b/lineups/templates/lineups/lineup.html index 74b2b0c..4e719d9 100644 --- a/lineups/templates/lineups/lineup.html +++ b/lineups/templates/lineups/lineup.html @@ -1,4 +1,4 @@ -{% extends 'base.html' %}{% block title %} {{ title }} {% endblock %} +{% extends 'base.html' %}{% block title %} {{ title }} {% endblock %}{% load crispy_forms_tags %} {% block content %}

      {{ title }}

      @@ -8,11 +8,26 @@
      -
        - {% for li in lineup %} -
      • {{ l_i }}
      • +{#
          #} +
          + {% csrf_token %} + {% for pos in positionings_formset %} +
          +
          +
          + {{ pos.order }} +
          +
          + {{ pos.player }} +
          +
          + {{ pos.position }} +
          +
          +
          {% endfor %} -
        + +
      diff --git a/lineups/views.py b/lineups/views.py index e38b3e0..37e12ae 100644 --- a/lineups/views.py +++ b/lineups/views.py @@ -1,4 +1,6 @@ from django.shortcuts import render +from django.forms import formset_factory +from .forms import PositioningForm from django.http import HttpResponse from events.models import Event from players.models import Player @@ -7,5 +9,10 @@ from players.models import Player def edit(request, id): event = Event.objects.get(id=id) players = Player.objects.all() + PositioningFormSet = formset_factory(PositioningForm, extra=9) + formset = PositioningFormSet() print(event) - return render(request, 'lineups/lineup.html', {'title': 'Lineup', 'event': event, 'players': players, 'lineup':[]}) \ No newline at end of file + return render(request, 'lineups/lineup.html', {'title': 'Lineup', + 'event': event, + 'players': players, + 'positionings_formset':formset}) \ No newline at end of file From 1a90df3906110641645dfab2f16ec85ea958164c Mon Sep 17 00:00:00 2001 From: Tony Date: Wed, 10 Nov 2021 22:04:17 -0600 Subject: [PATCH 12/17] Add positing and initial data for lineup --- lineups/forms.py | 18 ++++++++++++++++++ lineups/templates/lineups/lineup.html | 4 +++- lineups/views.py | 23 ++++++++++++++++++----- 3 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 lineups/forms.py diff --git a/lineups/forms.py b/lineups/forms.py new file mode 100644 index 0000000..6ebadcb --- /dev/null +++ b/lineups/forms.py @@ -0,0 +1,18 @@ +from django import forms +from .models import Positioning +from django.forms import modelformset_factory +from crispy_forms.helper import FormHelper, Layout + +PositioningFormSet = modelformset_factory(model=Positioning, + fields = ['player', 'position', 'order'], + widgets = { + 'order':forms.NumberInput(attrs={'style':'width:6ch'}) + }) + +# class PositioningFormSet(modelformset_factory): +# class Meta: +# model = Positioning +# fields = ['player', 'position', 'order'] +# widgets = { +# 'order':forms.NumberInput(attrs={'style':'width:6ch'}) +# } diff --git a/lineups/templates/lineups/lineup.html b/lineups/templates/lineups/lineup.html index 4e719d9..e4f4f8a 100644 --- a/lineups/templates/lineups/lineup.html +++ b/lineups/templates/lineups/lineup.html @@ -9,8 +9,10 @@
      {#
        #} -
        + + {% csrf_token %} + {{ positionings_formset.management_form }} {% for pos in positionings_formset %}
        diff --git a/lineups/views.py b/lineups/views.py index 37e12ae..46544e3 100644 --- a/lineups/views.py +++ b/lineups/views.py @@ -1,17 +1,30 @@ -from django.shortcuts import render +from django.shortcuts import render, redirect, get_object_or_404 from django.forms import formset_factory -from .forms import PositioningForm +from .models import Positioning +from .forms import PositioningFormSet from django.http import HttpResponse +from django import forms from events.models import Event from players.models import Player # Create your views here. def edit(request, id): + + if request.method == 'POST': + # create a form instance and populate it with data from the request: + formset = PositioningFormSet(request.POST) + for form in formset: + if form.is_valid(): + # 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) + # return render(request, 'success.html', {'call_back':'schedule'}) event = Event.objects.get(id=id) players = Player.objects.all() - PositioningFormSet = formset_factory(PositioningForm, extra=9) - formset = PositioningFormSet() - print(event) + qset = Positioning.objects.filter(event_id=id, order__isnull = False) + formset = PositioningFormSet(queryset=qset) return render(request, 'lineups/lineup.html', {'title': 'Lineup', 'event': event, 'players': players, From 6148bf5d613ed7d796065ba777439974f97ccfb9 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 11 Nov 2021 07:27:40 -0600 Subject: [PATCH 13/17] Change schedule "vs." to capital letters --- events/templates/events/schedule.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/events/templates/events/schedule.html b/events/templates/events/schedule.html index dff2d79..298f6ca 100644 --- a/events/templates/events/schedule.html +++ b/events/templates/events/schedule.html @@ -4,7 +4,7 @@
          {% for event in events %}
        1. - {{ event.away_team.name }} vs. {{ event.home_team.name }}
          + {{ event.away_team.name }} vs. {{ event.home_team.name }}
          {{ event.start|date:"l, F j, Y g:i A" }}
          {{ event.venue.name }}
          Edit Event Details From c978d17964b15471a988a1f8aa85eb4775ebde51 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 11 Nov 2021 19:49:08 -0600 Subject: [PATCH 14/17] ignore data directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3b614d0..4939baa 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ __pycache__ db.sqlite3 media +/data # Backup files # *.bak From 31d78ac186f554abb28dfe8c939780d7dc2ac3f9 Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 11 Nov 2021 20:02:32 -0600 Subject: [PATCH 15/17] allow more hosts (including "*") --- benchcoach/settings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/benchcoach/settings.py b/benchcoach/settings.py index 7333e1f..92d2d48 100644 --- a/benchcoach/settings.py +++ b/benchcoach/settings.py @@ -26,8 +26,7 @@ SECRET_KEY = 'django-insecure-qib_j&47o$5l3*gi7y#8#3pjh_88sfdqn@dmp&gx+2)&1nzmor # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ["smithers-ii.local", "127.0.0.1"] - +ALLOWED_HOSTS = ["smithers-ii.local", "127.0.0.1", "10.0.1.4", "*"] # Application definition From a4f9852c36e68f4acf8e72876369cccce0c834cd Mon Sep 17 00:00:00 2001 From: Tony Date: Thu, 11 Nov 2021 20:30:55 -0600 Subject: [PATCH 16/17] allow more hosts (including "*") --- benchcoach/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benchcoach/settings.py b/benchcoach/settings.py index 92d2d48..826d42b 100644 --- a/benchcoach/settings.py +++ b/benchcoach/settings.py @@ -26,7 +26,7 @@ SECRET_KEY = 'django-insecure-qib_j&47o$5l3*gi7y#8#3pjh_88sfdqn@dmp&gx+2)&1nzmor # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = ["smithers-ii.local", "127.0.0.1", "10.0.1.4", "*"] +ALLOWED_HOSTS = ["smithers-ii.local", "127.0.0.1", "10.0.1.4", "benchcoach.ascorrea.com"] # Application definition From 9bf90a2ceac814558fe8e14f15c9c1b173d9f4a6 Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 12 Nov 2021 08:58:48 -0600 Subject: [PATCH 17/17] implement lineup retrieval and submission --- lineups/forms.py | 23 ++++++++++++++++++----- lineups/models.py | 1 + lineups/templates/lineups/lineup.html | 17 +++++------------ lineups/views.py | 7 +++++-- 4 files changed, 29 insertions(+), 19 deletions(-) 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,