Django DetailView получает одну запись из QuerySet
Пожалуйста, помогите мне получить одну запись из объекта QuerySet. views.py:
from django.contrib.postgres.aggregates import ArrayAgg
from django.http import JsonResponse,
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from movies.models import Book
class BooksMixin(ListView):
model = Book
http_method_names = ['get']
def get_queryset(self):
books = Book.objects.values().annotate(authors=ArrayAgg('authors__name',distinct=True)
return books
def render_to_response(self, context, **response_kwargs):
return JsonResponse(context)
class BooksDetail(BooksMixin, DetailView):
def get_context_data(self, *, object_list=None, **kwargs):
queryset = self.get_queryset()
context = queryset.get(id=self.kwargs['pk'])
return context
urls.py:
from django.urls import path
from books import views
urlpatterns = [
path('books/<uuid:pk>/', views.BooksDetail.as_view()),
]
Это работает, но я хочу получить одну запись из queryset
внутри класса BooksDetail
более элегантно, без использования фильтра kwargs['pk']
. Я пытался использовать конструкцию типа
class BooksDetail(BooksMixin, DetailView):
def get_context_data(self, *, object_list=None, **kwargs):
queryset = self.get_queryset()
context = super(BooksDetail, self).get_context_data(**kwargs)
context['bla'] = queryset
return context
но получил ошибку:
'BooksDetail' object has no attribute 'object'