pk
не является параметром в get_queryset
, есть только self
.
Позиционные и именованные параметры URL хранятся в self.args
и self.kwargs
соответственно.
Таким образом, вы можете исправить get_queryset
на:
class group1ListView(LoginRequiredMixin,ListView):
model = group1
def get_queryset(self): # no pk parameter
company_details = get_object_or_404(company, pk=<b>self.kwargs['pk']</b>)
return self.model.objects.filter(
User=self.request.user,
Company=company_details.id
)
Однако вы можете повысить эффективность, написав один запрос (но семантика немного отличается)Например:
class group1ListView(LoginRequiredMixin,ListView):
model = group1
allow_empty = False
def get_queryset(self): # no pk parameter
return self.model.objects.filter(
User=self.request.user,
Company<b>=self.kwargs['pk']</b>
)
Мы можем добавить allow_empty = False
в случае, если мы хотим поднять 404, когда таких group1
s не найдено.
Ваш urls.py
, конечнонеобходимо передать значение pk
, например:
# app/urls.py
urlpatterns = [
url(r'^<b>(?P<pk>\d+)</b>$',views.group1ListView.as_view(),name='grouplist')
]
Таким образом, вы можете запросить group
компании с путем, который имеет id
компании.Если это корневой URL, то это что-то вроде host.org/123
Я думаю, что желательно переименовать параметр в company_pk
, поскольку прямо сейчас вы «намекнете», что это pk
модели group1
, а не Company
.Эта путаница может привести к запросам, которые выглядят правильными, но это не так.Большинству разработчиков будет странно, если они увидят запрос типа
group1.objects.get(pk=self.kwargs['company_pk'])
, но не увидят
group1.objects.get(pk=self.kwargs['pk'])