我如何用 django-tables2 总结已检查的列

how can I summarize checked column with django-tables2

我有一个包含一些列的 table。一列是复选框列。 那么,如何总结勾选了 checkboxcolumn 的 "quantity" 列呢? 如果有人能帮助我,我将不胜感激。

django-tables2 docs on CheckBoxColumn mention:

You might expect that you could select multiple checkboxes in the rendered table and then do something with that. This functionality is not implemented. If you want something to actually happen, you will need to implement that yourself.

所以 django-tables2 没有内置的东西,我们必须自己写一些东西。这更像是一个 JavaScript/HTML 问题,但无论如何,让我们看看我们是否可以为这个模型创建一个 table:

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

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

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 示例应用程序。