J'ai un gestionnaire personnalisé pour un modèle Django. Je ne semble pas pouvoir attraper l'exception DoesNotExist ici. Je sais comment le faire à l'intérieur du modèle mais cela n'a pas fonctionné ici:
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 ne fonctionne pas non plus . Qu'est-ce qui ne va pas ici?
Essayez d’utiliser ObjectDoesNotExist
au lieu de DoesNotExist
ou éventuellement self.DoesNotExist
. Si tout échoue, essayez simplement d'attraper une Exception
vanille et de l'évaluer pour voir si elle est de type ().
from Django.core.exceptions import ObjectDoesNotExist
Comme suggéré par panchicore, self.model
est la voie à suivre.
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
vous pouvez utiliser DoesNotExist à partir de l'instance Manager.model (self.model), lorsque vous dites objects = MyManager()
, vous affectez self.model dans la classe MyManager.
try:
task = self.get(id=kwargs["id"])
return task
except self.DoesNotExist:
return None
Si vous devez implémenter ceci sur une méthode de liste (DRF) à l'aide de GenericViewSet et que vous avez besoin de retourner une liste vide, utilisez ceci:
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)