如何用django-tables2汇总检查列

时间:2018-06-15 21:35:03

标签: django django-tables2

我有一些包含一些列的表。一列是复选框列。 那么,我怎样才能总结出数量"复选列列的列是否已选中? 如果有人能帮助我,我感激不尽。

1 个答案:

答案 0 :(得分:0)

django-tables2 docs on CheckBoxColumn mention

  

您可能希望可以在呈现的表中选择多个复选框,然后执行一些操作。未实现此功能。如果您希望实际发生某些事情,则需要自己实施。

因此django-tables2没有内置任何内容,我们必须自己编写一些内容。这更多的是JavaScript / HTML问题,但是无论如何,让我们看看是否可以为该模型创建表:

class Country(models.Model):
    name = models.CharField(max_length=100)
    population = models.PositiveIntegerField()

这是一个基本表,通过向其中一列添加页脚参数来向表添加空页脚。稍后我们将使用此页脚来放入计算出的人口总数。

class CheckboxTable(tables.Table):
    select = tables.CheckBoxColumn(empty_values=(), footer='')

    population = tables.Column(attrs={'cell': {'class': 'population'}})

    class Meta:
        model = Country
        template_name = 'django_tables2/bootstrap.html'
        fields = ('select', 'name', 'population')

现在是模板。我使用jQuery来快速创建一个函数来计算总和。每次在其中一个复选框上以及在页面加载上触发change事件时,都会执行此功能。

{% load django_tables2 %}
{% render_table table %}
<script src="//code.jquery.com/jquery.min.js"></script>
<script>
$(function () {

    // calculate the sum of the population column for the selected rows.
    function update_sum() {
        var sum = 0;
        // loop over each checkbox within <tbody>
        $('tbody input[type=checkbox]').each(function () {
            // if the checkbox is checked
            if ($(this).is(':checked')) {
                // find the contents of the population column, convert
                // it to integer and add it to the total.
                sum += parseInt($(this).parents('tr').find('.population').html());
            }
        });
        // add the sum to the footer cell in the population column.
        $('tfoot .population').html(sum);
    }

    // update the sum after each change
    $('tbody input[type=checkbox]').on('change', update_sum);

    // update the sum initially.
    update_sum();
});
</script>

added code similar to this到django-tables2示例应用程序。