在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)