在属性Django Tables 2中使用“record”

时间:2013-12-18 19:58:38

标签: django django-tables2

我正在将表格移动到django-tables2。到现在为止几乎一切正常,但现在我遇到了问题。

在我当前的版本中,我使用复选框来选择项目

<td><input type="checkbox" class="checkbox_delete" name="event" id="event.id"
                                               value="{{ event.id }}" />

这种方式在视图中我可以使用request.POST.getlist('event')

恢复event.id

现在我正在尝试将“value”属性添加到CheckBoxColumn

select = tables.CheckBoxColumn(attrs={'td__input': {'class': 'checkbox_delete', 'name': 'event', **'value': [A('id')]**}, 'th__input': {'id': 'selectAll'}},
                                   empty_values=())

我一直在玩Accesor和我在templateColumn中使用的record.id.

如何将id传递给value属性??

2 个答案:

答案 0 :(得分:2)

我在这里找到了另一个解决方案How to get information from Django_tables2 row?

只需要定义select = tables.CheckBoxColumn(accessor='pk')并将值添加为record.id

答案 1 :(得分:1)

您可以简单地执行以下操作:

id = tables.CheckBoxColumn()

这样,列就会像这样呈现

<input type="checkbox" name="id" value="X">

其中X将是id字段的值。

现在获得更完整的答案:

您可以添加td__input来覆盖某些默认值,但我不相信您可以将其设置为每列不同的值!通过检查来源:

https://github.com/bradleyayers/django-tables2/blob/master/django_tables2/columns/checkboxcolumn.py

你会看到render中的CheckBoxColumn方法会创建一个包含输入,td__input和一些默认值的属性的AttributeDict,如下所示:

def render(self, value, bound_column):  # pylint: disable=W0221
        default = {
            'type': 'checkbox',
            'name': bound_column.name,
            'value': value
        }
        general = self.attrs.get('input')
        specific = self.attrs.get('td__input')
        attrs = AttributeDict(default, **(specific or general or {}))
        return mark_safe('' % attrs.as_html())

所以你定义的attrs在所有列中都是相同的,因为attrs.as_html只会将'x':'y'dict条目转换为x = y ...

因此,如果您想要完全控制并使用每列的值执行任何操作,只需使用子句CheckBoxColumn并覆盖render(左侧作为读者的例外情况)。

<强>更新

此外,关于您自己的render方法的一个非常好的事情是您不需要将相同的参数定义为基本参数。这是因为django-tables2使用getargspec函数来找出渲染所期望的参数,并将它们传递给render方法。因此,如果您查看https://github.com/bradleyayers/django-tables2/blob/master/django_tables2/rows.py,您会看到可以传递给render的可用参数及其值是:


available = {
      'value':        value,
      'record':       self.record,
      'column':       bound_column.column,
      'bound_column': bound_column,
      'bound_row':    self,
      'table':        self._table,
}

因此,您可以定义render方法,例如: def render(self, value, bound_column, record):

也将记录传递给它。