我正在使用 Raw 方法过滤一些数据,它允许用户使用 Select2 插件在一个字段中选择多个值,我得到每个字段的 request.POST,做过滤的东西,然后我返回这样的上下文:
context = {
'form': MyForm(request.POST),
'results': results,
}
return render(request, self.template_name, context)
当我返回结果以显示它们时,应该向用户显示选择了哪些字段,但是当表单呈现时,我只选择了列表的第一个值(从 POST 中检索)。我必须设置其他东西吗?还是我做错了什么?
更新:从 Django 表单渲染输入小部件:
equipo = ChoiceField(
widget=Select(
attrs={'class': 'form-control input-sm', 'multiple': 'multiple'}
)
)
另外,我没有保存,我只是检索值以使用raw
方法应用过滤器并返回原始查询结果。
看法:
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
在raw
方法中使用多个值来使用 SQL子句。
我用一种不太好的方法解决了这个问题,但它有效:
我将组件在 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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句