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

0 投票
1 回答
1645 浏览
提问于 2025-04-19 15:50

我有一个基于类的视图 -

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

我想要在查询结果为空时返回404错误,该怎么做呢?

我正在使用Django Rest Framework。目前,如果我访问一个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

但是它提示我的缩进有问题,可我看不出哪里错了。

1 个回答

5

可能是因为你没有写异常处理的部分,所以出现了问题。其实你不需要保留那个尝试的部分,因为你只是做了一个简单的条件判断。

另外,你的 if queryset == True: 这句是多余的,你可以直接写 if queryset:

可以试试这样的写法:

from django.http import Http404

# The rest of your code here...

if queryset:
    return queryset
else:
    raise Http404

想了解更多信息,可以查看 django关于返回404错误的文档

撰写回答