1

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

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

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

这样在视图中我可以使用恢复 event.idrequest.POST.getlist('event')

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

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

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

如何将 id 传递给 value 属性?

4

2 回答 2

2

你可以简单地做这样的事情:

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中将创建一个 AttributeDict 包含来自输​​入、td__input 和一些默认值的属性,如下所示:

def render(self, value, bound_column): # pylint: disable=W0221
        默认 = {
            '类型':'复选框',
            “名称”:bound_column.name,
            “价值”:价值
        }
        一般 = self.attrs.get('输入')
        具体 = 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...

因此,如果您想完全控制并对每一列的值做任何您喜欢的事情,只需 subclssCheckBoxColumn和覆盖render(留给读者作为练习)。

更新

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

可用 = {
      “价值”:价值,
      '记录': self.record,
      “列”:bound_column.column,
      'bound_column':bound_column,
      'bound_row':自我,
      “表”:self._table,
}

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

也将记录传递给它。

于 2013-12-18T20:48:05.223 回答
2

我在这里找到了另一个解决方案如何从 Django_tables2 行获取信息?

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

于 2013-12-19T19:58:21.897 回答