我使用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
子句。
答案 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>