我有以下脚本在url中传递jQuery数组:
jQuery(document).ready(function($) {
$("#continue").click(function() {
var selected = $("#meds").bootgrid("getSelectedRows");
var url = "{% url 'meds:prescription' 'test' %}";
url = url.replace('test', selected);
window.location = url;
});
});
和以下观点:
class PrescriptionView(generic.ListView):
template_name = 'meds/prescription.html'
context_object_name = 'meds'
model = Medicament
def get_queryset(self):
return Medicament.objects.filter(id__in=self.kwargs['selected'])
所选数组看起来像[3, 4]
,传递的网址看起来像http://127.0.0.1:8000/prescription/3,4/
我一直收到错误:
ValueError at /prescription/3,4/
invalid literal for int() with base 10: ','
我只是假设传递的数组将被视为python列表,因此我在过滤器中使用了id__in
,因此我可以将id与列表/数组的项进行比较。
答案 0 :(得分:2)
id__in
is expecting an array。
你传递的是一个字符串。在引擎盖下,它试图以int
格式
您可以这样做:
ids = map(int, self.kwargs['selected'].split(","))
return Medicament.objects.filter(id__in=ids)
基本上,您要拆分分隔符,并创建一个ID数组。
演示:
>>> x = "3,4"
>>> map(int, x.split(","))
[3, 4]
>>>