Consolidated List View

This commit is contained in:
2021-11-14 17:03:08 -06:00
parent 1ec7a09620
commit b4c2428752
8 changed files with 63 additions and 97 deletions

View File

@@ -6,7 +6,7 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.root, name="root"), path('', views.root, name="root"),
path('list', views.list, name="events list"), path('list', views.EventsListView.as_view(), name="events list"),
path('edit/<int:id>', views.edit, name="edit event"), path('edit/<int:id>', views.edit, name="edit event"),
path('edit', views.edit, name="edit event"), path('edit', views.edit, name="edit event"),
path('edit', views.edit, name="edit event") path('edit', views.edit, name="edit event")

View File

@@ -1,55 +1,51 @@
from django.shortcuts import render, redirect, get_object_or_404 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.http import HttpResponse
from django.urls import reverse from django.urls import reverse
from .models import Event from .models import Event
from .forms import EventForm from .forms import EventForm
from django.http import HttpResponse 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): def root(request):
return redirect('/events/schedule') 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): 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 this is a POST request we need to process the form data
if request.method == 'POST': if request.method == 'POST':
# create a form instance and populate it with data from the request: # create a form instance and populate it with data from the request:
if id: if id:
instance = get_object_or_404(Event, id=id) instance = get_object_or_404(Model, id=id)
form = EventForm(request.POST or None, instance=instance) form = Form(request.POST or None, instance=instance)
else: else:
form = EventForm(request.POST or None) form = Form(request.POST or None)
# check whether it's valid:
if form.is_valid(): if form.is_valid():
# process the data in form.cleaned_data as required
# ...
# redirect to a new URL:
if id == 0: id = None if id == 0: id = None
new_event, did_create = Event.objects.update_or_create(pk=id, defaults=form.cleaned_data) new_item, did_create = Model.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) return render(request, 'success.html', {'call_back':call_back,'id':new_item.id}, status=201 if did_create else 200)
else: else:
return HttpResponse(status=400) return HttpResponse(status=400)
@@ -57,8 +53,8 @@ def edit(request, id=0):
else: else:
if id: if id:
instance = get_object_or_404(Event, id=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: else:
form = EventForm form = Form
return render(request, 'edit.html', {'form': form, 'id': id, 'call_back': 'edit event'}) return render(request, 'edit.html', {'form': form, 'id': id, 'call_back': 'edit event'})

View File

@@ -1,10 +1,13 @@
from django.urls import path, include from django.urls import path, include
from .views import PlayerListView
from . import views from . import views
urlpatterns = [ urlpatterns = [
path('', views.root, name="root"), 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/<int:id>', views.edit, name="edit player"), path('edit/<int:id>', views.edit, name="edit player"),
path('edit', views.edit, name="edit player") path('edit', views.edit, name="edit player")
] ]

View File

@@ -1,33 +1,24 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic.list import ListView
from django.http import HttpResponse from django.http import HttpResponse
from django.urls import reverse from django.urls import reverse
from .models import Player from .models import Player
from .forms import PlayerForm from .forms import PlayerForm
from lib.views import BenchcoachListView
# Create your views here. # 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): def root(request):
return redirect('/players/list') 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): def edit(request, id=0):
# if this is a POST request we need to process the form data # if this is a POST request we need to process the form data
if request.method == 'POST': if request.method == 'POST':

View File

@@ -6,7 +6,7 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.root, name="root"), path('', views.root, name="root"),
path('list', views.list, name="teams list"), path('list', views.TeamsListView.as_view(), name="teams list"),
path('edit/<int:id>', views.edit, name="edit team"), path('edit/<int:id>', views.edit, name="edit team"),
path('edit', views.edit, name="edit team") path('edit', views.edit, name="edit team")
] ]

View File

@@ -3,28 +3,16 @@ from django.http import HttpResponse
from django.urls import reverse from django.urls import reverse
from .forms import TeamForm from .forms import TeamForm
from .models import Team from .models import Team
from lib.views import BenchcoachListView
def root(request): def root(request):
return redirect('/teams/list') return redirect(reverse('venues list'))
def list(request): class TeamsListView(BenchcoachListView):
items = Team.objects.all() Model = Team
context = { edit_url = 'edit venue'
list_url = 'venues list'
'title': "Teams", page_title = "Venues"
'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)
def edit(request, id=0): def edit(request, id=0):
# if this is a POST request we need to process the form data # if this is a POST request we need to process the form data

View File

@@ -4,7 +4,7 @@ from . import views
urlpatterns = [ urlpatterns = [
path('', views.root, name="root"), path('', views.root, name="root"),
path('list', views.list, name="venues list"), path('list', views.VenueListView.as_view(), name="venues list"),
path('edit/<int:id>', views.edit, name="edit venue"), path('edit/<int:id>', views.edit, name="edit venue"),
path('edit', views.edit, name="edit venue") path('edit', views.edit, name="edit venue")
] ]

View File

@@ -3,28 +3,16 @@ from django.http import HttpResponse, HttpResponseBadRequest
from django.urls import reverse from django.urls import reverse
from .models import Venue from .models import Venue
from .forms import VenueForm from .forms import VenueForm
from lib.views import BenchcoachListView
def root(request): def root(request):
return redirect('/venues/list') return redirect('/venues/list')
def list(request): class VenueListView(BenchcoachListView):
items = Venue.objects.all() Model = Venue
context = { edit_url = 'edit venue'
'title': "Venues", list_url = 'venues list'
'items': [ page_title = "Venues"
{'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)
def edit(request, id=0): def edit(request, id=0):
# if this is a POST request we need to process the form data # if this is a POST request we need to process the form data