【问题标题】:django tables data alternating rowsdjango表数据交替行
【发布时间】:2013-06-01 21:18:45
【问题描述】:

我想建立一个表格来显示棒球比赛的统计数据。我目前有一个模型来代表一场棒球比赛。

class Baseball(models.Model):
    gametime = models.DateTimeField()
    vteam = models.CharField(max_length=255)
    vpitcher = models.CharField(max_length=255)
    hteam = models.CharField(max_length=255)
    hpitcher = models.CharField(max_length=255)

还有其他字段,但这足以解释我要做什么。

我正在使用django-tables2 来呈现我的表格。我定义了一个 Table 类

class BaseballTable(tables.Table):
    class Meta:
        model = models.Baseball

我的看法

class Home(SingleTableView):
    model = models.Baseball
    table_class = tables.BaseballTable

但默认行为不是我想要的。这些表在我的数据库中显示每个条目一行。

gametime     vteam     vpitcher     hteam     hpitcher
date1        vteam1    vpitcher1    hteam1    hpitcher1
date2        vteam2    vpitcher2    hteam2    hpitcher2

相反,我希望表的行不直接模仿数据库模型,而是按如下方式交替行,因此第 1 行和第 3 行从同一位置拉出,但第 2 行和第 4 行不同。

gametime     team     pitcher
date1        vteam1   vpitcher1
<blank>      hteam1   hpitcher1
date2        vteam2   vpitcher2
<blank>      hteam2   hpitcher2

有谁知道 django-tables2 是否可以做到这一点,或者我是否需要编写自己的表?

【问题讨论】:

  • 可以。阅读文档以了解如何操作。
  • @Colleen 这不是很有建设性。我认为这是一个合理的问题。文档的哪一部分涵盖了这一点?
  • django-tables2.readthedocs.org/en/latest/… 我认为让别人为你阅读是不合理的。
  • 我没有要求任何人为我阅读。我不太了解文档以了解如何执行此操作。您链接的部分并没有让我清楚地知道如何使第二行与第一行不同。没必要对它粗鲁。

标签: python django django-tables2


【解决方案1】:

我相信你有一个合理的问题。

首先,我建议使用普通表而不是模型表,因为毕竟您需要覆盖所有列。

不同类型的行中的数据不是 django-tables2 开箱即用的支持,因此文档没有说明这一点。但是,您可以使用许多方法来实现您想要的。

一种方法是排列传递给表的数据,其中一行包含 date1 - vteam1 - vpitcher1,下一行包含空白 - hteam1 - hpitcher1。为此,您将使用表数据创建一个新列表,并将原始查询数据中的记录放入其中。如果您允许此解决方案,则必须非常小心地进行排序。

另一种更简单的方法是创建查询,以便它们返回 date1、vteam
hteam1、vpitcher1
hpicher1。因此,当您渲染它时,您将在不同的行中获得 vteam1 和 hteam1 !因为我现在无法测试它,如果这似乎不起作用,那么可能
不安全,因此您应该输出包含在 mark_safe 中的值。

为此,只需为团队和投手覆盖您的 render_row 并返回 mark_safe(value) (或创建一个新类 TwoRowsColumn 将打印您喜欢的值 - 您甚至可以创建一个包含两行的小 html 表hteam 和 vteam 并将打印在 hteam/vteam 的单元格中)。在这里排序更容易,但是您无法使用 hteam 或 hpitcher 进行排序。

还有其他方法 - 例如子类化 ModelTable 来做你想做的事,但我不推荐它,因为你的要求非常具体,不会轻易在其他地方重用。

【讨论】:

  • 谢谢。排序对我的用例没有意义,所以我打算禁用它。
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 2016-07-11
  • 1970-01-01
  • 2018-04-15
  • 2017-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多