From b4c24287527407f7b17a90a2d5113b9415137979 Mon Sep 17 00:00:00 2001 From: Tony Date: Sun, 14 Nov 2021 17:03:08 -0600 Subject: [PATCH] Consolidated List View --- events/urls.py | 2 +- events/views.py | 68 +++++++++++++++++++++++------------------------- players/urls.py | 5 +++- players/views.py | 31 ++++++++-------------- teams/urls.py | 2 +- teams/views.py | 26 +++++------------- venues/urls.py | 2 +- venues/views.py | 24 +++++------------ 8 files changed, 63 insertions(+), 97 deletions(-) diff --git a/events/urls.py b/events/urls.py index 0191034..4a3b454 100644 --- a/events/urls.py +++ b/events/urls.py @@ -6,7 +6,7 @@ from . import views urlpatterns = [ path('', views.root, name="root"), - path('list', views.list, name="events list"), + path('list', views.EventsListView.as_view(), name="events list"), path('edit/', views.edit, name="edit event"), path('edit', views.edit, name="edit event"), path('edit', views.edit, name="edit event") diff --git a/events/views.py b/events/views.py index 03bf718..6e9a580 100644 --- a/events/views.py +++ b/events/views.py @@ -1,55 +1,51 @@ from django.shortcuts import render, redirect, get_object_or_404 +from django.views import View +from django.db import models from django.http import HttpResponse from django.urls import reverse from .models import Event from .forms import EventForm from django.http import HttpResponse +from lib.views import BenchcoachListView + +class EventsListView(BenchcoachListView): + Model = Event + edit_url = 'edit player' + list_url = 'players list' + page_title = "Players" + title_strf = '{item.away_team.name} vs. {item.home_team.name}' + body_strf = "{item.start:%a, %b %-d, %-I:%M %p},\n{item.venue.name}" + + def get_context_data(self): + context = super().get_context_data() + for item in context['items']: + item['buttons'].append( + { + 'label': 'Edit Lineup', + 'href': reverse('edit lineup', args=[item['id']]) + } + ) + return context def root(request): return redirect('/events/schedule') -def list(request): - events = Event.objects.all() - context = { - 'title': "Events", - 'items': [ - { - 'id': event.id, - 'title': f'{event.away_team.name} vs. {event.home_team.name}', - 'body':f'{event.start:%a, %b %-d, %-I:%M %p},\n{event.venue.name}', - 'buttons':[ - { - 'label':'Edit', - 'href':reverse('edit event', args=[event.id]) - }, - { - 'label': 'Edit Lineup', - 'href': reverse('edit lineup', args=[event.id]) - } - ] - } - for event in events - ] - } - return render(request, 'list.html', context) - def edit(request, id=0): + Form = EventForm + Model = Event + call_back = reverse('events list') # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: if id: - instance = get_object_or_404(Event, id=id) - form = EventForm(request.POST or None, instance=instance) + instance = get_object_or_404(Model, id=id) + form = Form(request.POST or None, instance=instance) else: - form = EventForm(request.POST or None) - # check whether it's valid: + form = Form(request.POST or None) if form.is_valid(): - # process the data in form.cleaned_data as required - # ... - # redirect to a new URL: if id == 0: id = None - new_event, did_create = Event.objects.update_or_create(pk=id, defaults=form.cleaned_data) - return render(request, 'success.html', {'call_back':reverse('schedule'),'id':new_event.id}, status=201 if did_create else 200) + new_item, did_create = Model.objects.update_or_create(pk=id, defaults=form.cleaned_data) + return render(request, 'success.html', {'call_back':call_back,'id':new_item.id}, status=201 if did_create else 200) else: return HttpResponse(status=400) @@ -57,8 +53,8 @@ def edit(request, id=0): else: if id: instance = get_object_or_404(Event, id=id) - form = EventForm(request.POST or None, instance=instance) + form = Form(request.POST or None, instance=instance) else: - form = EventForm + form = Form return render(request, 'edit.html', {'form': form, 'id': id, 'call_back': 'edit event'}) \ No newline at end of file diff --git a/players/urls.py b/players/urls.py index 6618794..fd9b055 100644 --- a/players/urls.py +++ b/players/urls.py @@ -1,10 +1,13 @@ from django.urls import path, include +from .views import PlayerListView + from . import views urlpatterns = [ path('', views.root, name="root"), - path('list', views.list, name="players list"), + # path('list', views.list, name="players list"), + path('list', PlayerListView.as_view(), name='players list'), path('edit/', views.edit, name="edit player"), path('edit', views.edit, name="edit player") ] \ No newline at end of file diff --git a/players/views.py b/players/views.py index 6808ba5..8b8e3ab 100644 --- a/players/views.py +++ b/players/views.py @@ -1,33 +1,24 @@ from django.shortcuts import render, redirect, get_object_or_404 +from django.views.generic.list import ListView from django.http import HttpResponse from django.urls import reverse from .models import Player from .forms import PlayerForm +from lib.views import BenchcoachListView # Create your views here. + +class PlayerListView(BenchcoachListView): + Model = Player + edit_url = 'edit player' + list_url = 'players list' + page_title = "Players" + title_strf = "{first_name} {last_name}" + subtitle_strf = "#{jersey_number}" + def root(request): return redirect('/players/list') -def list(request): - items = Player.objects.all() - context = { - 'title': "Players", - 'items': [ - {'id': item.id, - 'title': f"{item.first_name} {item.last_name}", - 'subtitle': f"{item.jersey_number}", - 'buttons': [ - { - 'label': 'Edit', - 'href': reverse('edit player', args=[item.id]) - } - ] - } - for item in items] - } - - return render(request, 'list.html', context) - def edit(request, id=0): # if this is a POST request we need to process the form data if request.method == 'POST': diff --git a/teams/urls.py b/teams/urls.py index 16c4438..b286168 100644 --- a/teams/urls.py +++ b/teams/urls.py @@ -6,7 +6,7 @@ from . import views urlpatterns = [ path('', views.root, name="root"), - path('list', views.list, name="teams list"), + path('list', views.TeamsListView.as_view(), name="teams list"), path('edit/', views.edit, name="edit team"), path('edit', views.edit, name="edit team") ] \ No newline at end of file diff --git a/teams/views.py b/teams/views.py index 13bde9e..7bdb34f 100644 --- a/teams/views.py +++ b/teams/views.py @@ -3,28 +3,16 @@ from django.http import HttpResponse from django.urls import reverse from .forms import TeamForm from .models import Team +from lib.views import BenchcoachListView def root(request): - return redirect('/teams/list') + return redirect(reverse('venues list')) -def list(request): - items = Team.objects.all() - context = { - - 'title': "Teams", - 'items': [ - {'id': item.id, - 'title': f"{item.name}", - 'buttons': [ - { - 'label': 'Edit', - 'href': reverse('edit team', args=[item.id]) - } - ] - } - for item in items] - } - return render(request, 'list.html', context) +class TeamsListView(BenchcoachListView): + Model = Team + edit_url = 'edit venue' + list_url = 'venues list' + page_title = "Venues" def edit(request, id=0): # if this is a POST request we need to process the form data diff --git a/venues/urls.py b/venues/urls.py index 39fa35b..59122ab 100644 --- a/venues/urls.py +++ b/venues/urls.py @@ -4,7 +4,7 @@ from . import views urlpatterns = [ path('', views.root, name="root"), - path('list', views.list, name="venues list"), + path('list', views.VenueListView.as_view(), name="venues list"), path('edit/', views.edit, name="edit venue"), path('edit', views.edit, name="edit venue") ] \ No newline at end of file diff --git a/venues/views.py b/venues/views.py index 15d7135..d8c9177 100644 --- a/venues/views.py +++ b/venues/views.py @@ -3,28 +3,16 @@ from django.http import HttpResponse, HttpResponseBadRequest from django.urls import reverse from .models import Venue from .forms import VenueForm +from lib.views import BenchcoachListView def root(request): return redirect('/venues/list') -def list(request): - items = Venue.objects.all() - context = { - 'title': "Venues", - 'items': [ - {'id': item.id, - 'title': f"{item.name}", - 'buttons': [ - { - 'label': 'Edit', - 'href': reverse('edit venue', args=[item.id]) - } - ] - } - for item in items] - } - return render(request, 'list.html', context) - +class VenueListView(BenchcoachListView): + Model = Venue + edit_url = 'edit venue' + list_url = 'venues list' + page_title = "Venues" def edit(request, id=0): # if this is a POST request we need to process the form data