2015-09-19 12 views
6

मैं केवल model_info वापस करना चाहता हूं अगर query_params दिया जाता है अन्यथा इसे कुछ त्रुटि संदेश देना चाहिए।Django रेस्ट फ्रेमवर्क में query_params पर सत्यापन

मैंने कोड के नीचे कोशिश की लेकिन यह क्वेरी पैराम में नाम पारित होने पर मुझे गंभीरता दे रहा है।

from rest_framework.validators import ValidationError 

class ModelSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ModelName 
     fields = ('name', 'abbreviation') 

    def validate_name(self, value): 
     if value: 
      return value 
     else: 
      raise ValidationError('Enter name') 



class ModelNameListList(generics.ListCreateAPIView): 
    renderer_classes = (JSONRenderer,) 
    serializer_class = ModelSerializer 

    def get_queryset(self): 
     queryset = ModelName.objects.all() 
     name = self.request.query_params['name'] 
     queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all() 
     return queryset 

मैं क्योंकि मैं भी पृष्ठांकन उपयोग कर रहा हूँ विधि मिलता है, अगर मैं विधि का उपयोग करेगा यह मुझे वापस आ जाएगी सभी परिणामों का प्रयोग नहीं कर सकते।

जब मैं नीचे दिए गए कोड का उपयोग कर रहा get_queryset में मैं प्रतिक्रिया ऑब्जेक्ट हो रही है कोई लंबाई

def get_queryset(self): 
     queryset = ModelName.objects.all() 
     name = self.request.query_params.get('name', None) 
     if name: 
      queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all() 
     else: 
      content = {'errors': 'name is missing'} 
      return Response(content) 
     return queryset 

उत्तर

2

है इस समारोह के साथ:

def get_queryset(self): 
     queryset = ModelName.objects.all() 
     name = self.request.query_params.get('name', None) 
     if name: 
      queryset = queryset.filter(Q(name__icontains=name) | Q(abbreviation__icontains=name)).all() 
     else: 
      raise exceptions.ParseError("name not supplied") 
     return queryset 

आप सुनिश्चित करें कि आप हमेशा एक लौट रहे हैं बनाना चाहिए क्वेरीसेट (या अपवाद उठा रहा है अगर आप इसे कैसे संभालना चाहते हैं)।

+3

शायद 'अपवाद होना चाहिए। वैधता त्रुटि' - 'पार्सइरर' विकृत डेटा के लिए आरक्षित है [डॉक्स] (http://www.django-rest-framework.org/api-guide/exceptions/#parseerror) जबकि 'सत्यापनकरण' अच्छी तरह से गठित डेटा के लिए है जो सत्यापन दिशानिर्देशों को पूरा नहीं करता है। – connorbode

+0

@connorbode मैं वही सोच रहा था, लेकिन जब मैं 'व्यू' से 'सत्यापन' को बढ़ाने का प्रयास करता हूं तो यह सर्वर 500 फेंकता है, एक अच्छी तरह से बनाई गई JSON प्रतिक्रिया के बजाय 'सत्यापन त्रुटि ./../' कहता है। मुझे लगता है कि 'प्रमाणीकरण त्रुटि' Serializers के लिए छड़ी है। निश्चित नहीं –

संबंधित मुद्दे