2013-12-18 25 views
0

Я перемещаю свои таблицы в django-tables2. К настоящему времени почти все работает нормально, но теперь у меня проблема.Использование «записи» в атрибутах Таблицы Django 2

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

<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.

Как передать идентификатор атрибуту value ??

ответ

1

Вы можете просто сделать что-то вроде этого:

id = tables.CheckBoxColumn()

Таким образом, колонка будет оказана как этот

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

где X будет значение поля идентификатора.

Теперь для более полного ответа:

Вы можете добавить 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 будут одинаковыми во всех столбцах, так как attrs.as_html просто преобразует записи 'x': 'y' dict в x = y ...

Итак, если вы хотите иметь полный контроль и делайте все, что вам нравится, со значениями для каждого столбца, просто подписями CheckBoxColumn и переопределяйте render (оставляйте в качестве примера для читателя).

Update

Кроме того, очень хорошая вещь о собственном 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):

также передать ему отчет.

+0

Спасибо, я буду делать это таким образом –

Смежные вопросы