2014-04-11 10 views
17

में QueryString मानों तक कैसे पहुंच सकता हूं मैं serializer कक्षा में क्वेरीस्ट्रिंग मानों तक पहुंचने का प्रयास कर रहा हूं।मैं Serializer Django Rest Framework

class OneZeroSerializer(rest_serializer.ModelSerializer): 

    location = rest_serializer.SerializerMethodField('get_alternate_name') 

    def get_alternate_name(self, obj): 
     view = self.context['view'] 
     print view.kwargs['q'] #output is {} 
     return 'foo' 


    class Meta: 
     model = OneZero 

     fields = ('id', 'location') 

दृश्य

class OneZeroViewSet(viewsets.ModelViewSet): 

    serializer_class = OneZeroSerializer 

    queryset = OneZero.objects.all() 

क्वेरी स्ट्रिंग का उपयोग करने की यह सही तरीका है?

उत्तर

20

की में लंबित बहिष्करण ओउ ViewSets उपयोग करते समय, आप अनुरोध serializer संदर्भ में (जैसे आप दृश्य को देखने के) का उपयोग कर सकते हैं। तुम इतनी पथ-भाग से, इस

def get_alternate_name(self, obj): 
    request = self.context['request'] 
    print request.QUERY_PARAMS['q'] 
    return 'foo' 

विशेषता view.kwargs आपके url-config से पार्स नामित तर्क होता है से क्वेरी पैरामीटर पहुँच सकते हैं।

+0

नए संस्करणों के लिए: 'request.QUERY_PARAMS' को संस्करण 3.0 के बाद 'request.query_params' के पक्ष में बहिष्कृत कर दिया गया है, और संस्करण 3.2 के रूप में पूरी तरह से हटा दिया गया है। – lukik

8

docs आप self.request.QUERY_PARAMS

उपयोग करने के लिए आप देख सकते हैं यह प्रयोग किया जा रहा चाहते हैं के अनुसार here

अद्यतन:

डीआरएफ 3.0 के रूप में:

अनुरोध का उपयोग .QUERY_PARAMS एन है पक्ष लोवरकेस request.query_params

+0

यह त्रुटि जब मैं इस आदेश को 'OneZeroSerializer' ऑब्जेक्ट कोई विशेषता 'अनुरोध' है मुद्रित है। मुझे लगता है कि इसे सीरिएलाइज़र क्लास –

+0

के लिए विचारों में उपयोग नहीं किया जा सकता है आह हाँ, क्या चल रहा था यह गलत है। Serializers अनुरोधों से बंधे नहीं हैं, यदि आप चुनते हैं तो आप उन्हें अलग से उपयोग कर सकते हैं। इसका मतलब है कि उनके पास GET और POST डेटा की कोई अवधारणा नहीं है। क्वेरी पैराम को serializer को भेजने के लिए आपको अपने दृश्य को संशोधित करने की आवश्यकता है। – rockingskier