2016-03-08 24 views
1

我們知道django有CommaSeperated模型字段。但是我們如何將commaSeparated字符串傳遞給Django GET參數。Django通過逗號隔開的值來獲取參數

每當我試圖像下面通過一些如GET參數:

1,2,3,4 

我收到的Django視圖

request.GET.get('productids','') 

它在Django視圖結束了類似下面使用下面的代碼。

'1,2,3,4' 

它最後在數組周圍加引號。

請任何Django專家幫我解決這個問題。

回答

1

您可以使用getlist

param_list = request.GET.getlist('productids') 

如果你把它當作一個參數,那麼你可以建,這

param_list = [int(x) for x in request.GET.get('productids', '').split(',')] 
+0

這將適用於像'?product_ids = 1&product_ids = 2&...'這樣的查詢字符串。我認爲OP有類似'?product_ids = 1,2,3,4' – Alasdair

+0

@Alasdair - 好的,如果是這種情況,我想我以前可能會回答...我會盡力找到它。 – Sayse

+0

@Alasdair - 我發現它在[你留下的評論](http://stackoverflow.com/questions/35483580/passing-a-list-through-url-in-django/35483756#comment58666329_35483756),我覺得親切如果你想創建自己的答案,我會很高興地刪除我的 – Sayse

1

Django將GET和POST參數轉換爲字符串(或unicode)。這意味着,如果你發送一個列表(數組)作爲GET參數,你最終會在後端得到一個字符串。

但是,您可以將字符串轉換回數組。也許是這樣的:

product_ids = request.GET.get('productids', '') 
ids_array = list(product_ids.replace(',', '')) # remove comma, and make list 

ids_array是這樣的 - ['1', '2', '3']

更新:

有一件事值得一提的是ids_array的ID是字符串,不是整數(感謝Alasdair誰在評論中指出了這一點下文)。如果您需要整數,請參見answer by Sayse

+0

這將會給字符串列表中,OP想要的清單整數。 – Alasdair

+0

@Alasdair是的,沒錯。但是如果OP需要從DB查詢產品,Django會自動將ID轉換爲整數。 – xyres

+0

我們不知道操作系統將使用數組從數據庫中查詢產品。想象一下,如果你沒有轉換爲整數,他們會在'ids_array:'中執行'if'。 – Alasdair