在Django的自定义pipe理器中捕获DoesNotExistexception

我有一个Django模型的自定义pipe理器。 我似乎无法赶上DoesNotExistexception在这里。 我知道如何在模型中做到这一点,但在这里不起作用:

class TaskManager(models.Manager): def task_depend_tree(self, *args, **kwargs): if "id" in kwargs: try: task = self.get(id=kwargs["id"]) except DoesNotExist: raise Http404 

Get_object_or_404也不起作用。 这里有什么问题?

尝试使用ObjectDoesNotExist而不是DoesNotExist或可能self.DoesNotExist 。 如果一切都失败了,只要尝试和捕捉一个香草Exception并评估它看到它的types()。

from django.core.exceptions import ObjectDoesNotExist

如panchicorebuild议, self.model是要走的路。

 class TaskManager(models.Manager): def task_depend_tree(self, *args, **kwargs): if "id" in kwargs: try: task = self.get(id=kwargs["id"]) except self.model.DoesNotExist: raise Http404 

您可以使用Manager.model(self.model)实例中的DoesNotExist,当您在MyManager类中指定objects = MyManager()时指定self.model。

  try: task = self.get(id=kwargs["id"]) return task except self.DoesNotExist: return None 

如果您需要使用GenericViewSet在列表方法(DRF)上实现此function,并且需要返回空列表,请使用以下命令:

  def list(self, request, *args, **kwargs): self.get_object() # I use this to trigger the object_permission try: queryset = self.queryset.filter(user=(YourModel.objects.get(user=request.user).user)) except YourModel.DoesNotExist: return Response(YourModel.objects.none()) serializer = YSourModelSerializer(queryset, many=True) return Response(serializer.data)