Commit cb1b88ad authored by impfundev's avatar impfundev

fix: shifting book from function based to class based view

parent 728d3898
from django.urls import path from django.urls import path
from .views import index, update, delete from books.views import BookListView, BookCreateView, BookUpdateView, BookDeleteView
urlpatterns = [ urlpatterns = [
path("", index, name="book_list"), path("", BookListView.as_view(), name="book_list"),
path("<int:id>/update/", update, name="book_update"), path("add/", BookCreateView.as_view(), name="book_update"),
path("<int:id>/delete/", delete, name="book_delete"), path("<int:pk>/", BookUpdateView.as_view(), name="book_update"),
path("<int:pk>/delete/", BookDeleteView.as_view(), name="book_delete"),
] ]
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from datetime import datetime
from django.db.models import Q from django.db.models import Q
from django.views import generic
from books.models import Book from books.models import Book
from books.forms import BookForm from books.forms import BookForm
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
def index(request):
context = {"form": BookForm()}
books = Book.objects.all()
default_page = 1
page = request.GET.get("page", default_page)
items_per_page = 5
paginator = Paginator(books, items_per_page)
try:
page_obj = paginator.page(page)
context["page_obj"] = page_obj
context["books"] = page_obj
except PageNotAnInteger:
page_obj = paginator.page(default_page)
context["page_obj"] = page_obj
context["books"] = page_obj
except EmptyPage:
page_obj = paginator.page(paginator.num_pages)
context["page_obj"] = page_obj
context["books"] = page_obj
if request.method == "POST":
form = BookForm(request.POST)
if form.is_valid:
title = form.data["title"]
stock = form.data["stock"]
description = form.data["description"]
Book.objects.create(title=title, stock=stock, description=description) class BookListView(generic.ListView):
model = Book
template_name = "books.html"
paginate_by = 5
if request.method == "GET": def get_queryset(self):
keyword = request.GET.get("q") queryset = super().get_queryset()
order = request.GET.get("o") keyword = self.request.GET.get("q")
order = self.request.GET.get("o")
if keyword is not None: if keyword:
queryset = queryset.filter(
filtered_book_list = Book.objects.filter(
Q(title__icontains=keyword) | Q(description__icontains=keyword) Q(title__icontains=keyword) | Q(description__icontains=keyword)
).order_by("-created_at") ).order_by("-created_at")
context["books"] = filtered_book_list
if order == "new":
context["books"] = Book.objects.all().order_by("-updated_at")
elif order == "old":
context["books"] = Book.objects.all().order_by("updated_at")
return render(request, "book.html", context)
def update(request, id):
latest_book_list = Book.objects.order_by("created_at")
context = {"books": latest_book_list}
book = Book.objects.get(id=id)
initial_dict = {
"title": book.title,
"stock": book.stock,
"description": book.description,
}
print(book.title)
form = BookForm(request.POST or None, initial=initial_dict)
if request.method == "POST":
if form.is_valid:
title = form.data["title"]
stock = form.data["stock"]
description = form.data["description"]
book = Book.objects.filter(id=id)
book.update( if order:
title=title, if order == "new":
stock=stock, queryset = queryset.order_by("-created_at")
description=description, elif order == "old":
updated_at=datetime.now(), queryset = queryset.order_by("created_at")
)
return HttpResponseRedirect("/dashboard/books") return queryset.order_by("-updated_at")
context["form"] = form
context["book_id"] = id
return render(request, "book_update_form.html", context)
class BookCreateView(generic.edit.CreateView):
model = Book
form_class = BookForm
success_url = "/dashboard/books/"
template_name = "form/create_form.html"
def delete(request, id):
context = {}
book = get_object_or_404(Book, id=id)
if request.method == "POST": class BookUpdateView(generic.edit.UpdateView):
book.delete() model = Book
form_class = BookForm
success_url = "/dashboard/books"
template_name = "form/update_form.html"
return HttpResponseRedirect("/dashboard/books")
return render(request, "book.html", context) class BookDeleteView(generic.edit.DeleteView):
model = Book
success_url = "/dashboard/books"
template_name = "form/delete_form.html"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment