Django删除formset

时间:2015-12-14 23:21:40

标签: python django django-forms django-views

我有一个模板,用户搜索要删除的一些记录。

我在试图弄清楚如何从模型中删除多条记录时遇到了麻烦。

    def XMLFieldsView(request):
        if request.method == 'POST':
           lista = request.POST.getlist('eliminar')
           """ Here I am lost """
        else:
           lista = 'nada'
           form = BuscarServicioForm()
           idxml = request.GET.get('id_xml')
           tabla = XMLFORMTable(XML_FORM.objects.filter(id_xml = 00))
           try:
              idxml = idxml
           except ValueError:
              idxml = 00
           if idxml:
              tabla = XMLFORMTable(XML_FORM.objects.filter(id_xml = idxml))
           RequestConfig(request,paginate={"per_page":60}).configure(tabla)


        return render_to_response('listacampos.html',
                                  {'table':tabla,'form':form,'lista':lista},
                                  context_instance=RequestContext(request))

使用表单的用户

  

BuscarServicioForm   选择一组记录,在那里他可以选择要删除的记录。

但是,如果我需要使用formset执行此操作,或者我可以从表格中将值转换为表格

<form method="POST" id="table_form">
<table >
....
</table>
<input type="submit">
</form>

并获取帖子数据以删除记录。

我正在使用django-tables2以这种方式呈现表格:

TEMPLATE_CHECK = """
<span class="input-group-addon">
        <input type="checkbox" id="id_eliminar" name="eliminar">
</span>
"""
class XMLFORMTable(tables.Table):
      eliminar = tables.TemplateColumn(TEMPLATE_CHECK,verbose_name='Eliminar')
      class Meta:
            model = XML_FORM
            exclude = ['id_form','obs']

我正在考虑使用formset,但我不知道如何做到这一点。

请提供任何建议或指南

提前致谢

1 个答案:

答案 0 :(得分:1)

html模板必须知道对象的pk才能获取对象列表。

class XMLFORMTable(tables.Table):
      eliminar = tables.CheckBoxColumn(accessor='pk')
      class Meta:
            model = XML_FORM
            exclude = ['id_form','obs']

如果将pk赋予复选框的值,则检索已检查元素的值列表。

import render

def XMLFieldsView(request):
    if request.method == 'POST':
       lista = request.POST.getlist('eliminar')
       """ Here I am lost """
       for pk in lista:
           get_object_or_404(ElObjeto, pk=pk).delete()
    else:
       ....

    return render(request, listacampos.html,{'table':tabla,'form':form,'lista':lista})

同样渲染,是render_to_response的快捷方式,它将自动使用RequestContext