Files
benchcoach-django/lib/views.py
2021-12-10 08:50:19 -06:00

83 lines
3.0 KiB
Python

from django.shortcuts import render, redirect, get_object_or_404
from django.views import View
from django.views.generic.base import TemplateView
from django.forms.models import model_to_dict
from django import forms
from django.db import models
from django.http import HttpResponse, HttpResponseBadRequest
from django.urls import reverse
# from .models import Event
# from .forms import EventForm
from django.http import HttpResponse
class BenchcoachListView(TemplateView):
Model = models.Model
template_name = 'list.html'
edit_url = 'edit item'
list_url = 'items list'
template_name = 'list.html'
page_title = f"{Model.__name__}s"
title_strf = "{item}"
subtitle_strf = ""
body_strf = ""
active_tabs = []
def get_context_data(self):
items = self.Model.objects.all()
context = {
'title': self.page_title,
'items': [
{
'id': item.id,
'title': self.title_strf.format(item=item, **model_to_dict(item)),
'subtitle': self.subtitle_strf.format(item=item, **model_to_dict(item)),
'body': self.body_strf.format(item=item, **model_to_dict(item)),
'buttons': [
{
'label': 'Edit',
'href': reverse(self.edit_url, args=[item.id])
}
]
}
for item in items
]
}
for tab in self.active_tabs:
context[tab] = 'active'
return context
class BenchcoachEditView(TemplateView):
Form: forms.ModelForm = None
Model: models.Model = None
edit_url = 'edit item'
list_url = 'items list'
def post(self, request, *args, **kwargs):
id = kwargs.get('id')
# create a form instance and populate it with data from the request:
if id:
instance = get_object_or_404(self.Model, id=id)
form = self.Form(request.POST or None, instance=instance)
else:
form = self.Form(request.POST or None)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
# ...
# redirect to a new URL:
new_item, did_create = self.Model.objects.update_or_create(pk=id, defaults=form.cleaned_data)
return render(request, 'success.html', {'call_back_url': reverse(self.list_url), 'id': new_item.id},
status=201 if did_create else 200)
return HttpResponseBadRequest()
def get(self, request, *args, **kwargs):
pass
id = kwargs.get('id')
if id:
instance = get_object_or_404(self.Model, id=id)
form = self.Form(request.POST or None, instance=instance)
else:
form = self.Form
return render(request, 'edit.html', {'form': form, 'id': id, 'call_back': self.edit_url})