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

时间:2014-09-03 18:36:53

标签: 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

我想让它返回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 个答案:

答案 0 :(得分:4)

这可能会引发一个问题,因为你没有除了阻止。你不需要保留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

有关详细信息,请查看django's documentation on returning 404 errors