【问题标题】:django-tables2 customize table visualizationdjango-tables2 自定义表格可视化
【发布时间】:2018-05-14 12:15:21
【问题描述】:

我正在使用 Django 开发一个网络应用程序(第一次使用它),我已经成功地使用 django-tables2 渲染了一个表格,它看起来像这样:

Sequence     Epitope     Score

sequence1    name1       0.5    
sequence1    name2       0.7
sequence2    name1       0.4
sequence2    name2       0.2
...          ...         ...

但我想切换列和行以使其看起来像:

Sequence     name1     name2     ...
sequence1    0.5       0.7       ...
sequence2    0.4       0.2       ...
...          ...       ...

有没有办法在改变我的模型的情况下改变这一点? 我一直在寻找一段时间,但我找不到改变这种情况的方法。谁能帮我解决这个问题?

这是来自 tables.py 的我的表格

class CSVTables(tables.Table):

class Meta:
    model = CSV_Results
    attrs = {
        'class': 'output_table',
        'th': {'class': 'output_table_header'}
        }
    template_name = 'django_tables2/bootstrap.html'
    fields = ('TCRsequence', 'Epitope', 'Score')#,"Submission_ID")

模型链接到一个表单,根据用户的输入,“Epitope”中可能有 10 个名称,50 个或只有 2 个,...。 我的模型:

class CSV_Results(models.Model):
TCRsequence = models.CharField(max_length=100)
Epitope = models.CharField(max_length=100)
Score = models.FloatField()
Submission_ID = models.ForeignKey('Info_Submission',on_delete=models.CASCADE)

class Meta:
    verbose_name_plural = "CSV_results"

我的意见.py:

table = CSVTables(CSV_Results.objects.filter(Submission_ID__Submission_ID__exact=submission_id))
    RequestConfig(request, paginate={'per_page': 50}).configure(table)

在我的 html 中,我刚刚渲染了表格:

{% 渲染表 %}

谢谢!

【问题讨论】:

  • 在这里使用 django-tables2 会减慢你的速度。您需要动态创建 CSVTables 类,因为您不知道用户的列选择。所以我的建议是手工编写查询和 javascript。 django-tables2 不是根据您的要求构建的。

标签: python html django django-tables2


【解决方案1】:

对于非动态生成的固定列集,如下定义表,不与模型关联

class CSVTables(Table):
   sequence = Column(verbose_name='Sequence')
   name1 = Column(verbose_name='Name1')
   name2 = Column(verbose_name='Name2')

然后遍历查询集对象以生成与表匹配的字典对象列表,该列表将在表初始化期间作为参数传递。每个字典对象的格式都应该是

{ 'sequence' : 'xxxx',
   'name1' : 'yyy',
   'name2' : 'zzz'}

更新:

django-tables2 不适合动态列生成。对于动态列客户端呈现是一个更好的选择。有几个像 datatables 这样的 JS 库可能会在客户端有所帮助。用于数据表的 django 视图应用程序是 django-datatable-view,但我还没有尝试过此应用程序中的动态表。如果没有,一个简单的视图可以根据数据表的要求序列化 JSON 数据,这很简单。

【讨论】:

  • 但唯一的问题是名称(name1,name2...)的数量取决于用户的输入(来自表单)。因此,对于一个用户,可能只有 2 个名称(name1 和 name2)提交,但对于另一个用户,可能有 50 个不同的名称通过表单(name1,name2,...,name50)提交,然后该表必须包含 50 列(每个名称 1 列)。你能让新表(不与模型关联)动态吗?
  • 那么 django-tables2 可能不是很好的解决方案。像数据表这样的客户端库可以从传递的 JSON 创建动态表。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-04
  • 2023-03-28
相关资源
最近更新 更多