django - 如果没有结果,类视图 404

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)

但它没有说我的缩进是错误的,但我不明白它是怎么回事。

rbo*_*ick 5

这可能会引发问题,因为您没有 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 错误的文档