Nil*_*Kar 3 python django django-models django-views
我正在开发一个会计应用程序...
我有一个名为“组”的模型,我想在特定公司内制作它......
我的意思是不同的公司会有不同的组
所以,我在列表视图中尝试过类似的事情
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))
Run Code Online (Sandbox Code Playgroud)
用户和公司字段通过我的 group1 模型中的外键相关。
但出现此错误:
TypeError get_queryset() 缺少 1 个必需的位置参数:'pk'
谁能告诉我我在这方面做错了什么?
谢谢
Thepk
不是 中的参数get_queryset
,只有self
is 。
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
)
Run Code Online (Sandbox Code Playgroud)
但是,您可以通过编写单个查询来提高效率(但语义略有不同),例如:
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']
)
Run Code Online (Sandbox Code Playgroud)
如果我们想在找不到allow_empty = False
这样的 s 时引发 404,我们可以添加。group1
您urls.py
当然需要传递该pk
值,例如:
# app/urls.py
urlpatterns = [
url(r'^(?P<pk>\d+)$',views.group1ListView.as_view(),name='grouplist')
]
Run Code Online (Sandbox Code Playgroud)
因此,您可以group
使用包含该公司的路径来查询该公司的 s id
。如果这是根 URL,则类似于host.org/123
然而,我认为建议将参数重命名为company_pk
,因为现在,您“暗示”这是pk
模型的group1
,而不是Company
。这种混淆可能会导致查询看起来正确,但实际上并不正确。如果大多数开发人员看到类似这样的查询,他们会觉得很奇怪
group1.objects.get(pk=self.kwargs['company_pk'])
Run Code Online (Sandbox Code Playgroud)
但当他们看到的时候却不是
group1.objects.get(pk=self.kwargs['pk'])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3188 次 |
最近记录: |