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
Другие вопросы по тегам