Как я могу автозаполнить поле в моей форме django в представлении на основе класса?

Я создаю возможность для пользователей комментировать книгу. У меня есть список книг, где размещены все книги в базе данных, а также подробная книга для каждой книги. Я создал форму для возможности комментирования в подробной книге, где передаю различные поля, но некоторые я хочу, чтобы автозаполнялись не самими пользователями, например, название книги и автора. С автором мне удалось это сделать, но название книги не работает. Буду благодарен, если вы сможете помочь с этим.

models.py

forms.py

from django import forms

from .models import Author, Book, Review

class NewReviewForm(forms.ModelForm):
    class Meta:
        model = Review
        fields = ("title", "body")

views.py

from django.db.models import Q
from django.contrib import messages
from django.contrib.messages.views import SuccessMessageMixin
from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse_lazy
from django.urls import reverse
from django.views.generic.edit import FormMixin
from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
                                  TemplateView, UpdateView)


from .filters import BookFilter
from .forms import AuthorForm, BookForm, NewReviewForm
from .models import Author, Book, Genre, Review



class BookDetailView(FormMixin, DetailView):
    model = Book
    template_name = "book-detail.html"
    context_object_name = "book"
    form_class = NewReviewForm

    def get_success_url(self):
        return reverse('book_detail', kwargs={'pk': self.object.id})

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["author"] = Author.objects.all()
        context['form'] = NewReviewForm(initial={'id': self.object})
        return context

    def post(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponseForbidden()
        self.object = self.get_object()
        form = self.get_form()
        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        form.instance.author = self.request.user
        form.save()
        return super(BookDetailView, self).form_valid(form)

 

book-detail.html

Вернуться на верх