динамические столбцы django-tables2

Можно ли сделать динамические столбцы в таблице с помощью django-tables2? У меня есть модель, которая содержит все столбцы, которые должны быть в таблице, и данные, которые должны находиться в столбцах, имеют внешний ключ для столбца.

class Data(models.Model):
    data = models.CharField()
    column = models.ForeignKey(Column)
    user = models.ForeignKey(User)

class Column(models.Model):
    header = models.CharField()

Таким образом, крайний левый столбец таблицы должен быть User, а все следующие столбцы должны быть столбцами в Column.objects.all(), тогда данные находятся под объектом столбца, к которому у него есть внешний ключ.

Я надеюсь, что вы можете помочь!


person Youri    schedule 14.06.2014    source источник
comment
Я не понимаю термин динамическая колонка. и вы хотите отображать данные в столбцах, которые имеют отношение внешнего ключа к другому столбцу??   -  person ruddra    schedule 15.06.2014
comment
Под динамическим столбцом я подразумеваю, что все столбцы загружаются из базы данных. Допустим, в базе данных есть столбец A1. Есть еще одна таблица с данными столбца, и если у нее есть внешний ключ со столбцом A1, он должен идти в столбце A1 в таблице. Надеюсь, это поможет..   -  person Youri    schedule 15.06.2014


Ответы (2)


Если вы хотите указать столбцы таблицы во время выполнения, а не во время программирования, вы можете использовать следующий класс:

таблицы.py

import django_tables2 as tableslib

class DynamicColumnsTable(tableslib.Table):

    def __init__(self, *args, column_specs=(), **kwargs):
        bc = type(self.base_columns)(self.base_columns) # clone                                                                                                          
        for name, column in column_specs:
            self.base_columns[name] = column
        tableslib.Table.__init__(self, *args, **kwargs) # refers to static spec                                                                                          
        type(self).base_columns = bc # restore static spec

Пример использования:

просмотры.py

import django.shortcuts as shortcuts
import django_tables2 as tableslib

def test(request):
    data = [
        {"name": "Bobo"},
        {"name": "Gogo"},
    ]

    djtable = DynamicColumnsTable(column_specs=(  ('name', tableslib.Column()),  ),
                                  data=data)
    return shortcuts.render(request, 'test.html', {'djtable': djtable})
person Olivier    schedule 16.03.2020

Таблица должна выглядеть так:

class ABC(tables.Table):  
      user= tables.Column(accessor='user.username')
      column= tables.Column(accessor= 'column.header')  
      data= tables.Column(accessor='data')


    class Meta:
       model = Data
       sequence= ('user', 'column', 'data')

Подробности: http://django-tables2.readthedocs.org/en/latest/#specifying-alternative-data-for-a-column

person ruddra    schedule 15.06.2014
comment
Извините за отсутствие ясности, я добавил немного кода, чтобы сделать его более понятным. - person Youri; 15.06.2014
comment
Проблема в том, что в Column.objects.all() более одного столбца. Все атрибуты ‹th› должны быть заголовком объектов столбца. Это сложно, и, возможно, мне не следует использовать django-tables2, а просто сделать это самому. Спасибо, в любом случае - person Youri; 15.06.2014
comment
использование accessor может упростить решение вашей проблемы. вы можете создать несколько столбцов с такими аксессорами, как column_footer=tables.Column(accessor='column.footer') - person ruddra; 15.06.2014