Django-filter AND Django-tables2 CheckBoxColumn兼容性

时间:2017-12-12 23:40:36

标签: python mysql django django-filter django-tables2

我希望通过Django-filter在我返回的表中有一个checkboxcolumn,然后通过复选框选择某些行,然后对这些行执行某些操作。

这是Django-filter:django-filter.readthedocs.io/en/1.1.0这是在Django-tables2中使用的checkboxcolumn的一个例子:stackoverflow.com/questions/10850316 / ...

我的问题是:我可以使用checkboxcolumn来表示通过Django-filter返回的表吗?

由于

2 个答案:

答案 0 :(得分:0)

从django-tables2的角度来看,django-filter的作用是提供不同的(过滤的)查询集。 django-tables2不关心谁组成了查询集,它只是迭代它并使用模型从查询集中渲染行。

因此,如果您是表的复选框列,或者使用django-filter,django-tables2将只呈现它获得的任何查询集。

如果您想将检查过的记录用于某些自定义过滤器,则必须进行一些手动编码,但不支持开箱即用。

简短回答:是的,您可以将django-tables2与CheckboxColumn一起使用django-filter。

答案 1 :(得分:0)

完整的工作代码:

filters.py

from project_django.models import SomeModel
import django_filters

class UserFilter(django_filters.FilterSet):

    class Meta:
        model = SomeModel
        fields = ['jobnumber', ]

views.py

def custom_table(request):

    user_list = SomeModel.objects.all()

    data = request.GET.copy()

    if len(data) == 0:
        data['jobnumber'] = 0

    user_filter = UserFilter(data, queryset=user_list)

    table1 = JobTable(user_filter.qs)

    # WORKING: custom table with checkbox
    RequestConfig(request).configure(table1)

    # WORKING: custom table with checkbox
    return render(request, 'index.html', {'table1': table1, 'filter': user_filter})

tables.py

import django_tables2 as tables
from .models import SomeModel


class JobTable(tables.Table):

    selection = tables.CheckBoxColumn(accessor='pk')
    #jobnumber = tables.Column()
    class Meta:
        model = SomeModel

index.html

{% load widget_tweaks %}
{% block content %}

  <form method="get">
    <div class="well">
      <h4 style="margin-top: 0">Filter</h4>
        <div class="row">
        <div class="form-group col-sm-4 col-md-3">
        {{ filter.form.as_p }}
        <button type="submit">Search</button>
        </div>
        </div>
      </div>
    </div>
  </form>

  <form action="roll.html" method="post">
      {% render_table table1 %}
      <input type="submit">

  </form>