Django Try/Except CBV 处理查询返回 None?
Django Try/Except CBVs dealing with query returning None?
我正在尝试包含一些异常处理来处理 return None
的查询,如果 none 是 returned 我只想显示一个简单的 JsonResponse
消息。使用 FBV,我已经非常简单地完成了这项工作。但是当使用基于 class 的视图时,我的 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
方法中,记录器如我所料 returning Business: None
。但是在 get
方法中, BusinessDetail.DoesNotexist
没有被击中。最后一个 Try/Except
块是被击中的块,returning return JsonResponse({'Error': 'DB error, return to previous page'}, status=500)
.
根据我的理解,DoesNotExist
异常会捕获查询 returning None
?但就我而言,这没有发生。非常感谢任何帮助!
From my understanding, the DoesNotExist exception would catch the query returning None
?
No, .first()
not 在找不到记录的情况下引发错误,在这种情况下只是 returns None
。因此,这将 not 引发任何 DoesNotExist
异常。 DoesNotExist
异常没有任何“特殊”之处,这只是与其他任何异常一样的异常。
您使用 .get(…)
[Django-doc] 而不是 .first()
得到 DoesNotExist
:
def get_object(self, queryset=None):
business = self.model.objects.values()<b>.get(</b>**custom filters here<b>)</b>
logger.debug(Business: {business}')
return business
我正在尝试包含一些异常处理来处理 return None
的查询,如果 none 是 returned 我只想显示一个简单的 JsonResponse
消息。使用 FBV,我已经非常简单地完成了这项工作。但是当使用基于 class 的视图时,我的 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
方法中,记录器如我所料 returning Business: None
。但是在 get
方法中, BusinessDetail.DoesNotexist
没有被击中。最后一个 Try/Except
块是被击中的块,returning return JsonResponse({'Error': 'DB error, return to previous page'}, status=500)
.
根据我的理解,DoesNotExist
异常会捕获查询 returning None
?但就我而言,这没有发生。非常感谢任何帮助!
From my understanding, the DoesNotExist exception would catch the query returning
None
?
No, .first()
not 在找不到记录的情况下引发错误,在这种情况下只是 returns None
。因此,这将 not 引发任何 DoesNotExist
异常。 DoesNotExist
异常没有任何“特殊”之处,这只是与其他任何异常一样的异常。
您使用 .get(…)
[Django-doc] 而不是 .first()
得到 DoesNotExist
:
def get_object(self, queryset=None):
business = self.model.objects.values()<b>.get(</b>**custom filters here<b>)</b>
logger.debug(Business: {business}')
return business