diff --git a/lib/__init__.py b/lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lib/views.py b/lib/views.py new file mode 100644 index 0000000..cf00d68 --- /dev/null +++ b/lib/views.py @@ -0,0 +1,79 @@ +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 = "" + + 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 + ] + } + 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})