我有一个端点
http://127.0.0.1:8000/auction/?status=['omn','aad']
我需要获取状态列表,因此我执行以下操作
print (request.GET.getlist('status'))
它让我回头
[u"['omn','aad']"]
这是一个列表字符串列表。
然后我使用ast.literal_eval将列表的字符串转换为列表。有没有直接的方法来获取状态列表?
答案 0 :(得分:10)
首先不要以该格式发送。为单个HTML发送多个值的标准方法是多次发送参数:
contentSize
使用http://127.0.0.1:8000/auction/?status=omn&status=aad
时会正确地为您提供['omn','aad']
。
答案 1 :(得分:4)
request.GET ['status']会返回['omn','aad']。
答案 2 :(得分:0)
扩展@DanielRoseman的答案。
正确的方法是按照以下说明传递每个变量:http://127.0.0.1:8000/auction/?status=omn&status=aad
。
但是,如果您使用的是现代Javascript框架(Vue,Angular,React),则很有可能会将params作为对象传递(例如,如果您正在使用axios,VueResource等)。所以,这是解决方法:
前端:
let params = {
status: ['omn', 'aad',]
}
return new Promise((resolve, reject) => {
axios.get(`/auction/`, { params: params }, }).then(response => {
resolve(response.data);
}).catch(error => {
resolve(error.response);
});
});
然后它将作为以下URL分发到Django:
[05/Aug/2019 10:04:42] "GET /auction/?status[]=omn&status[]=aad HTTP/1.1" 200 2418
然后可以在相应的视图中选择以下哪个:
# Before constructing **parameters, it may neccessary to filter out any supurfluous key, value pair that do not correspond to model attributes:
parameters['status__in'] = request.GET.getlist('status[]')
# Using parameters constructed above, filter the Auctions for given status:
auctions = Auction.objects.filter(is_active=True)
auctions = auctions.filter(**parameters)
答案 3 :(得分:-1)
这是 HTTPRequest 和 HTTPResponse
的文档