Django渲染:如何在Select2 Jquery插件中实例选择项目

时间:2017-06-01 23:13:00

标签: jquery django jquery-select2

我使用Raw方法过滤一些数据,它允许用户使用Select2插件在一个字段中选择多个值,我得到每个字段的request.POST,做过滤的东西,然后我返回这样的上下文:< / p>

context = {
    'form': MyForm(request.POST),
    'results': results,
}
return render(request, self.template_name, context)

当我返回结果以显示它们时,向用户显示选择了哪些字段,但是当表单呈现时,我只选择列表的第一个值(从POST检索)。我还需要设置别的东西吗?或者我做错了什么?

UPDATE:从Django表格中渲染输入小部件:

equipo = ChoiceField(
        widget=Select(
            attrs={'class': 'form-control input-sm', 'multiple': 'multiple'}
        )
    )

另外,我没有保存,我只是检索值以使用raw方法应用过滤器并返回rawquery结果。

查看:

class MedicionView(View):

    def __init__(self):
        self.template_name = "medicion/grid.html"

    def get(self, request):

        form = MedicionFiltersForm()
        odometros = Odometro.objects.all()
        equipos = Equipo.objects.all()
        results = Odometro.objects.raw('''
            select
            ....

                ''')[:100]

        contexto = {
            'form': form,
            'results': results,
        }

        return render(request, self.template_name, contexto)

    def post(self, request):
        # Retrieve data 
        form = MedicionFiltersForm(request.POST)
        equipos = request.POST.getlist('equipo')
        odometros = request.POST.getlist('odometro')
        tipo = request.POST.get('tipo')

        # business stuff

        results = Odometro.objects.raw('''
           select
            ...

                ''', [odometros, tipos, equipos])

        # More business stuff

        # return request.POST in form 
        contexto = {
            'form': form,
            'results': results,
        }
        return render(request, self.template_name, contexto)

我的模型中甚至不存在M2M,我只是使用多个值来使用WHERE IN方法中的SQL raw子句。

1 个答案:

答案 0 :(得分:0)

我用一个不太好的方法解决了这个问题,但它确实有效:

我将组件在POST方法中检索到的值传递给整数列表,然后将其转储到JSON中

lista_equipos = request.POST.getlist('equipo')
equipos_lista = [int(item) for item in lista_equipos]
equipos_json = json.dumps(equipos_lista)

我在上下文中返回JSON:

context = {
    # some extra variables
    'equipos_lista': equipos_json
}

在模板中,我检索此json并将值设置为select2组件。不要错过触发方法!

<script>
    var array_equipos = {{ equipos_lista }};
    $('#id_equipo').val(array_equipos);
    $('#id_equipo').trigger('change');

 </script>