Динамические столбцы с SingleTableMixin и FilterView в Django - PullRequest
0 голосов
/ 07 октября 2018

Я использую SingleTableMixin и FilterView в Django для рендеринга формы фильтра и таблицы.На базовом уровне это работает очень хорошо.

Теперь в таблице столько столбцов, сколько в модели есть полей (как и должно быть), но я хотел бы отобразить ТОЛЬКО столбцы, для которых пользователь предоставил входные данные в форме фильтра, и исключить другие столбцы.динамически.

Я пытаюсь добиться этого с помощью def get_table_kwargs(self): Вот мой код:

class FactListView(SingleTableMixin, FilterView):
    table_class = FactTable
    filterset_class = FactFilter
    template_name = 'main/table.html'

    def get_table_kwargs(self):
        filtered = self.filterset.form.data()

        columns = {}
        fact_fields = [
            "field_name1",
            "field_name2",
            "field_name3",
            "other fields",
            "...",

        ]

        for field, value in filtered():
            if value is not None:
                columns.update({field: value})

        fact_fields[:] = [x for x in fact_fields if x not in columns]
        return {
            'exclude': fact_fields
        }

В настоящее время я получаю сообщение об ошибке: «TypeError at / table / 'dict 'объект не вызывается' Это потому что я нуб.Поэтому я был бы очень признателен за комментарии по этой конкретной ошибке, которая возникает из filtered = self.filterset.form.data(), а также по общей логике.

Большое спасибо заранее!

1 Ответ

0 голосов
/ 17 ноября 2018

Я смог найти решение самостоятельно.Таким образом, в случае, если есть кто-то еще, кто также комбинирует django-tables2 с django-filter и хотел бы иметь динамическую визуализацию столбцов, в зависимости от того, отфильтровал ли пользователь соответствующее поле.

Моя ошибка была при попытке доступаfilterset.form.data для получения пользовательского ввода, когда мне нужно было перейти на запрос:

...
for field in fact_fields:
filtered = self.request.GET.get(field)
    if filtered is None:
    ...   
...