Как динамически изменить order_by, используя django -tables2? - PullRequest
5 голосов
/ 05 апреля 2020

Мой класс таблицы выглядит довольно типично, за исключением того, что, возможно, он включает функцию before_render (). Что хорошо до before_render, так это то, что я могу получить доступ к себе. Это дает мне доступ к динамической c информации о модели, которую я использую. Как я могу получить доступ к информации Dynami c (например, из before_render), чтобы изменить переменную order_by в классе Meta?

def control_columns(table_self):
    # Changes yesno for all Boolean fields to ('Yes','No') instead of the default check-mark or 'X'.
    for column in table_self.data.table.columns.columns:
        current_column = table_self.data.table.columns.columns[column].column
        if isinstance(current_column,tables.columns.booleancolumn.BooleanColumn):
            current_column.yesno = ('Yes','No')

class DynamicTable(tables.Table):
    def before_render(self, request):
        control_columns(self)

    class Meta:        
        template_name = 'django_tables2/bootstrap4.html'
        attrs = {'class': 'custom_table', 'tr': {'valign':"top"}}
        order_by = 'index'

1 Ответ

2 голосов
/ 13 апреля 2020

Так что это немного странно, но работает

class DynamicTable(tables.Table):
    ...
    def before_render(self, request):
        self.data.data = self.data.data.order_by('id')
        self.paginate()
    ...
...