who*_*rth 0 python django django-rest-framework
我有以下基于类的视图 -
class DeployFilterView(generics.ListAPIView):
serializer_class = DefinitionSerializer
def get_queryset(self):
jobname = self.request.GET.get('jobname')
if jobname.count("\\") == 1:
jobname = jobname.replace("\\", "")
queryset = Jobmst.objects.db_manager('Admiral').filter(jobmst_name=jobname).exclude(jobmst_prntname__isnull=True, jobmst_dirty='X')
else:
parent, job = jobname.rsplit('\\', 1)
queryset = Jobmst.objects.db_manager('Admiral').filter(jobmst_prntname=parent, jobmst_name=job).exclude(jobmst_dirty='X')
return queryset
Run Code Online (Sandbox Code Playgroud)
如果任一查询集不返回任何信息,我希望它返回 404 响应,我该如何将其链接起来?
我正在使用 Django Rest 框架。现在,如果我调用一个 URL 并且没有数据,它会传递一个我不想要的 200 OK。以下是我正在尝试的-
class DeployFilterView(generics.ListAPIView):
serializer_class = DefinitionSerializer
def get_queryset(self):
jobname = self.request.GET.get('jobname')
if jobname.count("\\") == 1:
jobname = jobname.replace("\\", "")
queryset = Jobmst.objects.db_manager('Admiral').filter(jobmst_name=jobname).exclude(jobmst_prntname__isnull=True, jobmst_dirty='X')
else:
parent, job = jobname.rsplit('\\', 1)
queryset = Jobmst.objects.db_manager('Admiral').filter(jobmst_prntname=parent, jobmst_name=job).exclude(jobmst_dirty='X')
try:
if queryset == True:
return queryset
else:
raise exceptions.DoesNotExist
Run Code Online (Sandbox Code Playgroud)
但它没有说我的缩进是错误的,但我不明白它是怎么回事。
这可能会引发问题,因为您没有 except 块。你不需要保留 try 块;因为你只是在做一个 if/else 语句。
此外,你if queryset == True:是不必要的,你可以做if queryset:。
尝试类似:
from django.http import Http404
# The rest of your code here...
if queryset:
return queryset
else:
raise Http404
Run Code Online (Sandbox Code Playgroud)
有关更多信息,您可以查看django 关于返回 404 错误的文档。