2013-01-10 20 views
40

'daki özel bir yöneticide yakalamak Django modeli için özel bir yöneticim var. Burada DoesNotExist özel durum yakalamak mümkün görünmüyor. Ben modeli içinde bunu yapmak için ama burada işe yaramadı biliyorum:DoNotExist istisnasını Django

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 da çalışmıyor. Burada sorun nedir?

+2

demek Bu iki durum için mi? Aslında ne oluyor? –

+0

@DanielRoseman NameError: 'DoesNotExist' genel adı tanımlı değil – Seperman

cevap

76

DoesNotExist veya self.DoesNotExist yerine ObjectDoesNotExist kullanmayı deneyin. Her şey başarısız olursa, bir vanilya Exception'u yakalamaya çalışın ve bunun türünü() görmesi için değerlendirin. Eğer MyManager sınıfının içindeki self.model atama objects = MyManager() derken

from django.core.exceptions import ObjectDoesNotExist

+0

Self.DoesNotExist'i denedim ve başarısız oldu. Veritabanında bir şey olmadığında elde ettiğim hata şöyledir: 'NameError: global name 'DoesNotExist' tanımlı değil 'Bu nedenle, bir yerde bulunan DoesNotExist'i içe aktarmam gerekiyor. Modellerde olduğunu farz ettim.Model ama models.Model.DoesNotExist işe yaramadı. – Seperman

+0

self.DoesNotExist açıkçası yardımcı olmayacaktır, çünkü böyle bir yöntemi varsa, kendini var olur. Bunun yerine 'task.DoesNotExist' veya' ObjectDoesNotExist' kullanın. –

+0

'ObjectDoesNotExist' öneriimi denediniz mi? Diğer sözdizimi self.model.DoesNotExist olabilir ... ama kafamın üstünden emin değilim. –

1

Eğer Manager.model (self.model) Örneğin, den DoesNotExist kullanabilirsiniz.

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

'self' yönetici, model değil – imns

+0

Bu işe yaramayacak. Self.model.DoesNotExist kullanmalısınız –

8

panchicore önerildiği gibi self.model gitmek yoludur.

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 
0

Eğer iade edilecek GenericViewSet kullanarak bir liste yöntemi (DRF) bu uygulamaya ve boş listesi gerekir gerekiyorsa, bunu kullanın: "çalışmıyor" neyi

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) 
İlgili konular