我正在处理会计申请...
我有一个名为group的模型,我想在特定公司内部制作...
我的意思是,不同的公司会有不同的组
所以,我已经在列表视图中尝试过类似的事情
class group1ListView(LoginRequiredMixin,ListView):
model = group1
def get_queryset(self, pk):
company_details = get_object_or_404(company, pk=pk)
return self.model.objects.all().filter(Q(User=self.request.user) & Q(Company=company_details.id))
在我的group1模型中,用户和公司字段通过外键关联。
但是出现此错误:
TypeError get_queryset()缺少1个必需的位置参数:“ pk”
有人可以告诉我我在做什么错吗?
谢谢
答案 0 :(得分:1)
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=self.kwargs['pk'])
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=self.kwargs['pk']
)
在找不到此类allow_empty = False
的情况下,如果想提高404,可以添加group1
。
您的urls.py
当然需要传递pk
值,例如:
# app/urls.py
urlpatterns = [
url(r'^(?P<pk>\d+)$',views.group1ListView.as_view(),name='grouplist')
]
因此,您随后可以查询具有公司group
路径的公司id
。如果这是根URL,那么它类似于host.org/123
但是我建议将参数重命名为company_pk
,因为现在,您“暗示”这是pk
模型的group1
,而不是{ {1}}。这种混淆可能导致查询 look 正确,但不正确。如果大多数开发人员看到
Company
但当他们看到
时不会group1.objects.get(pk=self.kwargs['company_pk'])