【发布时间】:2014-09-03 18:36:53
【问题描述】:
我有以下基于类的视图 -
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 框架。现在,如果我调用一个 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
但是它没有说我的缩进是错误的,但我不明白它是怎么回事。
【问题讨论】:
-
您是否尝试过引发 404 异常?
-
是的尝试异常,但我不明白为什么它不喜欢我的语法。更新以包含。
-
您缺少一个匹配的 except 子句。您使用 try 块是否有特殊原因?你能做吗
if queryset: return queryset else: raise Http404Also, see django's documentation on returning a 404. -
另外,你不需要
if queryset == True:,if queryset:也一样。 -
感谢您的帮助!我正在按照您的建议进行操作,我只需要获取 else 即可让异常指向 404 错误。
标签: python django django-rest-framework