Django

2013-01-10 4 views
40

में एक कस्टम मैनेजर में DoNotExist अपवाद को पकड़ना मेरे पास Django मॉडल के लिए एक कस्टम मैनेजर है। मैं यहां DoNotExist अपवाद को पकड़ने में सक्षम नहीं प्रतीत होता। मुझे पता है कि मॉडल के अंदर यह करने के लिए, लेकिन यह यहाँ काम नहीं किया: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 या तो काम नहीं करता। यहां क्या गलत है?

+2

क्या "काम नहीं करता है" क्या मतलब है , उन दोनों मामलों के लिए? वास्तव में क्या होता है? –

+0

@DanielRoseman NameError: वैश्विक नाम 'DoNotExist' को परिभाषित नहीं किया गया है – Seperman

उत्तर

76

DoesNotExist या संभवतः self.DoesNotExist के बजाय ObjectDoesNotExist का उपयोग करने का प्रयास करें। यदि सब कुछ विफल हो जाता है, तो बस एक वेनिला Exception को आजमाएं और पकड़ें और इसका प्रकार() देखें।

from django.core.exceptions import ObjectDoesNotExist

+0

मैंने Self.DoesNotExist की कोशिश की थी और यह असफल रहा। डेटाबेस में कुछ मौजूद नहीं होने पर मुझे त्रुटि मिलती है: 'NameError: वैश्विक नाम 'DoNotExist' परिभाषित नहीं किया गया है, इसलिए मुझे कहीं से DoNotExist आयात करने की आवश्यकता है। मुझे लगता है कि यह मॉडल में है। मॉडल लेकिन मॉडल। मॉडल.DoesNotExist काम नहीं किया। – Seperman

+0

self.DoesNotExist स्पष्ट रूप से मदद नहीं करेगा, क्योंकि अगर ऐसा कोई तरीका है तो स्वयं मौजूद है। इसके बजाए 'task.DoesNotExist' या' ऑब्जेक्टडोस नॉटएक्सिस्ट 'का उपयोग करें। –

+0

क्या आपने 'ऑब्जेक्टडोस नॉटएक्सिस्ट' के अपने सुझाव का प्रयास किया था? अन्य वाक्यविन्यास स्वयं हो सकता है। Model.DoesNotExist ... लेकिन मुझे यकीन है कि मेरे सिर के ऊपर से नहीं है। –

1

आप Manager.model (self.model) उदाहरण, से DoesNotExist का उपयोग जब आप कहते हैं objects = MyManager() आप MyManager वर्ग के अंदर self.model बताए जाते हैं कर सकते हैं।

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

'स्वयं' प्रबंधक है, मॉडल – imns

+0

नहीं यह काम नहीं करेगा। आपको self.model.DoesNotExist का उपयोग करना होगा –

8

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 
0

आप एक सूची विधि (डीआरएफ) GenericViewSet का उपयोग करने पर यह लागू है, और एक खाली सूची की जरूरत को लौटा दी की जरूरत है, इस का उपयोग करें:

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)