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 .views import index, update, delete
from books.views import BookListView, BookCreateView, BookUpdateView, BookDeleteView
urlpatterns = [
path("", index, name="book_list"),
path("<int:id>/update/", update, name="book_update"),
path("<int:id>/delete/", delete, name="book_delete"),
path("", BookListView.as_view(), name="book_list"),
path("add/", BookCreateView.as_view(), name="book_update"),
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.views import generic
from books.models import Book
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":
keyword = request.GET.get("q")
order = request.GET.get("o")
def get_queryset(self):
queryset = super().get_queryset()
keyword = self.request.GET.get("q")
order = self.request.GET.get("o")
if keyword is not None:
filtered_book_list = Book.objects.filter(
if keyword:
queryset = queryset.filter(
Q(title__icontains=keyword) | Q(description__icontains=keyword)
).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(
title=title,
stock=stock,
description=description,
updated_at=datetime.now(),
)
if order:
if order == "new":
queryset = queryset.order_by("-created_at")
elif order == "old":
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":
book.delete()
class BookUpdateView(generic.edit.UpdateView):
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