Как я могу получить «pk» или «id» в get_context_data из ListView
class AllListView(ListView):
context_object_name = 'all_products'
queryset = Product.objects.all
template_name = 'jewelry_store/home.html'
def get_context_data(self,**kwargs):
context = super(AllListView,self).get_context_data(**kwargs)
context['collections'] = Collection.objects.all
context['products'] = self.queryset
context['cool'] = Collection.objects.filter(pk=self.kwargs.get('pk'))
на выходе он дает пустой набор запросов
в URL
path('', views.AllListView.as_view(), name='all_products')
``
В вашем пути нет параметра pk
URL, поэтому self.kwargs.get('pk')
будет None
и, следовательно, не будет соответствовать элементу.
Вы должны закодировать первичный ключ в URL-адресе, например:
path('<int:pk>/', views.AllListView.as_view(), name='all_products')
и в ListView
вы действительно можете получить соответствующий Collection
:
from django.shortcuts import get_object_or_404
class AllListView(ListView):
queryset = Product.objects.all()
template_name = 'jewelry_store/home.html'
context_object_name = 'products'
def get_context_data(self,**kwargs):
context = super().get_context_data(**kwargs)
context['collections'] = Collection.objects.all()
context['cool'] = get_object_or_404(Collection, pk=self.kwargs['pk'])
return context
@hebel.dev: вы должны отредактировать путь, чтобы использовать параметр <int:pk>/
, и, таким образом, посетить страницу с 42/
, где 42
— это первичный ключ записи существующийCollection
.
все та же ошибка: r context['cool'] = get_object_or_404(Collection, pk=self.kwargs['pk']) #id=1 KeyError: 'pk'