【发布时间】:2021-04-10 14:22:03
【问题描述】:
我正在尝试包含一些异常处理来处理返回None 的查询,如果没有返回我只想显示一个简单的JsonResponse 消息。使用 FBV,我已经非常简单地完成了这项工作。但是当使用基于类的视图时,我的 except 块并没有像我预期的那样运行。
class BusinessDetailView(DetailView):
model = BusinessDetail
def get_object(self, queryset=None):
business = self.model.objects.filter(**custom filters here)).values().first()
logger.debug(Business: {business}')
return business
def get(self, request, *args, **kwargs):
try:
try:
business = self.get_object()
except BusinessDetail.DoesNotExist:
return JsonResponse({'Error': 'Business Does Not Exist.'})
return JsonResponse(company, status=200)
except Exception as e:
logger.error(f'Error getting business detail with error: {e}')
return JsonResponse({'Error': 'Database error, return to previous page'}, status=500)
在get_object 方法中,记录器按我的预期返回Business: None。但是在get 方法中,BusinessDetail.DoesNotexist 没有被击中。最后一个Try/Except 块是被击中的,返回return JsonResponse({'Error': 'DB error, return to previous page'}, status=500)。
据我了解,DoesNotExist 异常会捕获返回None 的查询?但就我而言,这并没有发生。非常感谢任何帮助!
【问题讨论】:
-
添加
raise e并发布异常的输出 -
您应该使用
.get(..)而不是.first()来获得DoesNotExist。 -
另外,您似乎在
logger.debug(Business: {business}')中有错字。也许应该引用Business
标签: django django-models django-views django-class-based-views