Django - 传递数组时,带有基数10的int()的文字无效:','

时间:2017-04-08 19:05:12

标签: python django

我有以下脚本在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与列表/数组的项进行比较。

1 个答案:

答案 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]
>>>