2014-04-11 42 views
17

我想訪問串行器類中的查詢字符串值。我如何訪問串行器Django Rest框架中的QueryString值

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,可以在串行器上下文訪問請求(如你訪問視圖)。你可以從這個

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

屬性view.kwargs包含您的網址,配置解析的命名參數訪問查詢參數,所以從路徑的一部分。

+0

對於較新的版本:'request.QUERY_PARAMS'已被棄用,自3.0版開始支持'request.query_params',並且從版本3.2開始已經完全刪除。 – lukik

8

根據您要使用self.request.QUERY_PARAMS

你可以看到它正在使用的docshere

UPDATE:

由於DRF 3.0:

的request.QUERY_PARAMS的用法是n OW未決棄用贊成小寫request.query_params

+0

這是錯誤當我印刷該命令「OneZeroSerializer」對象沒有屬性「請求」。我認爲這可以在視圖中使用,而不是串行器類 –

+0

啊是的,誤讀了發生了什麼。串行器與請求無關,如果您願意,可以單獨使用它們。這意味着他們沒有GET和POST數據的概念。您需要修改視圖以將查詢參數發送到序列化程序。 – rockingskier

1

self.context['request'].query_params