我正在将表格移动到django-tables2。到现在为止几乎一切正常,但现在我遇到了问题。
在我当前的版本中,我使用复选框来选择项目
<td><input type="checkbox" class="checkbox_delete" name="event" id="event.id"
value="{{ event.id }}" />
这种方式在视图中我可以使用request.POST.getlist('event')
现在我正在尝试将“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属性??
答案 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):
也将记录传递给它。