programing

Django의 사용자 지정 관리자에서 DoesNotExist 예외 잡기

coolbiz 2021. 1. 18. 08:13
반응형

Django의 사용자 지정 관리자에서 DoesNotExist 예외 잡기


Django 모델에 대한 사용자 지정 관리자가 있습니다. 여기서 DoesNotExist 예외를 잡을 수없는 것 같습니다. 모델 내부에서 수행하는 방법을 알고 있지만 여기서는 작동하지 않았습니다.

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. 다른 모든 것이 실패하면 바닐라를 잡아서 Exceptiontype ()인지 평가하십시오.

from django.core.exceptions import ObjectDoesNotExist


panchicore가 제안했듯이 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

objects = MyManager()MyManager 클래스 내에서 self.model을 할당 한다고 말할 때 Manager.model (self.model) 인스턴스에서 DoesNotExist를 사용할 수 있습니다 .

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

GenericViewSet을 사용하여 목록 메서드 (DRF)에서이를 구현해야하고 빈 목록을 반환해야하는 경우 다음을 사용합니다.

    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)

참조 URL : https://stackoverflow.com/questions/14255125/catching-doesnotexist-exception-in-a-custom-manager-in-django

반응형