Использование записи в атрибутах Django Tables 2

Я перемещаю свои таблицы в django-tables2. На данный момент почти все работает нормально, но теперь у меня проблема.

В моей текущей версии я использую флажки для выбора элементов

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

таким образом в представлении я могу восстановить event.id, используя request.POST.getlist('event')

Теперь я пытаюсь добавить атрибут «значение» в CheckBoxColumn.

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

Я играл с Accesor и record.id, который я использую в templateColumn.

Как я могу передать идентификатор в атрибут значения??


person Pablo V.    schedule 18.12.2013    source источник


Ответы (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
        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.as_html просто преобразует записи словаря «x»: «y» в 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):

также передать ему запись.

person Serafeim    schedule 18.12.2013
comment
Спасибо, так и сделаю - person Pablo V.; 19.12.2013
comment
Благодарю. Я хочу отключить флажки на основе содержимого строки, и это кажется хорошим способом сделать это. Сигнатура рендеринга родительского класса изменилась на def render(self, value,bound_column, record), но это никоим образом не влияет на это решение - person Tim Richardson; 10.08.2019

Здесь я нашел другое решение Как получить информацию из строки Django_tables2 ?

Просто нужно определить select = tables.CheckBoxColumn(accessor='pk') и добавить значение в качестве записи.id

person Pablo V.    schedule 19.12.2013