update raw queryset manager python django exception django-custom-manager

python - raw - Captura de la excepción DoesNotExist en un administrador personalizado en Django



python django raw sql (4)

Como panchicore sugirió, self.model es el camino a seguir.

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

Tengo un administrador personalizado para un modelo de Django. Parece que no puedo detectar la excepción DoesNotExist aquí. Sé cómo hacerlo dentro del modelo pero no funcionó aquí:

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 tampoco funciona. ¿Que esta mal aquí?


Intente usar ObjectDoesNotExist lugar de DoesNotExist o posiblemente self.DoesNotExist . Si todo lo demás falla, simplemente intente atrapar una Exception vanilla y evalúela para ver su tipo ().

from django.core.exceptions import ObjectDoesNotExist


Si necesita implementar esto en un método de lista (DRF) usando GenericViewSet, y necesita una lista vacía para ser devuelta, use esto:

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)


puede usar DoesNotExist desde la instancia Manager.model (self.model), cuando dice objects = MyManager() que está asignando self.model dentro de la clase MyManager.

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