Сделаем форму добавления новой книги, создадим файл books\forms.py со следующим содержимым:
from django.forms import ModelForm, CharField, TextInput
from .models import Book
class BookCreateForm(ModelForm):
title = CharField(required=False, widget=TextInput(attrs={"class": "clrtxt", "placeholder": "Title"}))
author = CharField(required=False, widget=TextInput(attrs={"class": "clrtxt", "placeholder": "Author"}))
price = CharField(required=False, widget=TextInput(attrs={"class": "clrtxt", "placeholder": "Price"}))
class Meta:
model = Book
fields = ['title', 'author', 'price']
Создадим файл шаблона формы templates\partial_create_book_form.html и добавим следующее содержимое:
<form>
<div>
<div>
{{ form.title }}
</div>
<div>
{{ form.author }}
</div>
<div>
{{ form.price }}
</div>
<div>
<!-- Кнопка "Add book" -->
<button type="submit" class="disbtn"> Add book</button>
</div>
</div>
</form>
Подключим его в templates\base.html перед <table>:
<!-- Форма для добавления новой книги -->
{% include "partial_create_book_form.html" %}
<!-- Таблица книг -->
Затем отредактируем функцию book_list() - добавим в неё форму.
После этого создадим новую функцию create_book(), которая будет сохранять книгу и в ответе будет возвращать строку таблицы только что добавленной книги.
Отредактируем файл books\views.py:
from django.http.response import HttpResponse
from django.shortcuts import render, get_object_or_404
from django.views.decorators.http import require_http_methods
from .models import Book
from .forms import BookCreateForm
@require_http_methods(['GET'])
def book_list(request):
book_list = Book.objects.all()
form = BookCreateForm(auto_id=False)
return render(request, 'base.html', {'book_list': book_list, 'form': form})
@require_http_methods(['POST'])
def create_book(request):
form = BookCreateForm(request.POST)
if form.is_valid:
book = form.save()
return render(request, 'partial_book_detail.html', {'book': book})
Добавим маршрут для данной функции, отредактируем файл books\urls.py:
from django.urls import path
from .views import book_list, create_book
urlpatterns = [
path("", book_list, name="book_list"),
path("create_book/", create_book, name="create_book"),
]