Django-tables2: Изменить атрибут для нескольких столбцов в __init__()
Я не могу понять, как изменить атрибут для нескольких столбцов в одном цикле for.
Я хочу установить orderable=False
на несколько столбцов. Единственный способ, который работает, это точно определить все эти столбцы, чтобы я мог добавить orderable=False
для конструктора.
class PizzaTable(tables.Table):
class Meta:
template_name = 'django_tables2/bootstrap-responsive.html'
model = Pizza
fields = ['created', 'ham', 'olives', 'corn', 'price',]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
unorderable_columns = ['ham', 'olives', 'corn',]
for column in unorderable_columns:
self.columns[column].orderable = False
Это поднимает:
не могу установить атрибут
Это должно быть в состоянии сделать это как-то иначе, в противном случае мне придется указать все эти столбцы:
ham = tables.Column(accessor='ham',orderable=False)
Есть ли у вас какие-либо идеи?
1 ответ
self.columns
содержит экземпляры BoundColumn
, Они имеют некоторые дополнительные знания (например, их собственное имя атрибута в таблице, в которой они используются) и относятся к фактическим определенным Column
экземпляр через self.column
, Они также выставляют orderable
атрибут через свойство setter-less, следовательно, ошибка. Чтобы динамически изменить это свойство, вы должны установить атрибут в базовом столбце:
self.columns[column].column.orderable = False
# instead of
# self.columns[column].orderable = False