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