Ячейки строк не отображаются в django-tables2 по умолчанию, проблема модели? - PullRequest
0 голосов
/ 10 июля 2019

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

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

данная ячейка имеет свойство строки и столбца. У строк есть свойство cell_set и table, но нет column_set. Таблицы имеют свойства row_set и column_set.

Так что проблема в том, что у строк нет свойства column_set? Поэтому, когда он ищет данные для рендеринга, он не находит эти столбцы.

Если я пытаюсь получить все ячейки, связанные со строкой, это неуклюжий процесс итерации по каждому столбцу в поисках ячейки в наборе ячеек, принадлежащем этому столбцу (см. Ниже).

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

Например, вот метод __str__ для строки:

def __str__(self):
    cell_values = ()

    for column in self.table.column_set.all().order_by('column_name'):
        cell = self.cell_set.get(column__column_name=column.column_name)
        if cell:
            cell_values.append(cell.value)
        else:
            cell_values.append("")
    return "::".join(cell_values)

На мой взгляд, это кажется очень неуклюжим, и я подозреваю, что это связано с недостатком модели, но я недостаточно хорошо понимаю Джанго, чтобы знать, где. Я подозреваю, что трудность извлечения значений ячеек для строки лежит в основе рендеринга по умолчанию, который не находит их.

В РЕДАКЦИИ: чтобы уточнить, что я рендерил таблицу, передав ей Queryset. Может быть, вместо этого мне нужно передать ему серию диктов, как в https://django -tables2.readthedocs.io / en / latest / pages / table-data.html # table-data ? Я бы предпочел не идти этим путем, так как он выглядит неуклюжим.

...