【问题标题】:Django Try/Except CBVs dealing with query returning None?Django Try/Except CBVs 处理返回 None 的查询?
【发布时间】: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


【解决方案1】:

据我了解,DoesNotExist 异常会捕获返回None的查询?

.first()not 在找不到记录的情况下会引发错误,在这种情况下,它只会返回 None。因此,这不会引发任何DoesNotExist 异常。 DoesNotExist 异常并没有什么“特别”之处,这只是一个异常,就像任何其他异常一样。

您使用.get(…) [Django-doc] 而不是.first() 来获得DoesNotExist

def get_object(self, queryset=None):
    business = self.model.objects.values().get(**custom filters here)
    logger.debug(Business: {business}')
    return business

【讨论】:

  • 啊啊啊。这是有道理的。我对此一无所知!非常感谢您的快速帮助和回复!
猜你喜欢
  • 2021-03-19
  • 2018-09-29
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2018-11-06
  • 2011-11-08
  • 2017-04-03
  • 2021-07-20
相关资源
最近更新 更多