1

野球の試合の統計を表示するテーブルを作成したいと考えています。現在、1 つの野球の試合を表すモデルをセットアップしています。

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を使用しています。テーブルクラスを定義しました

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

そして私の見解

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

しかし、デフォルトの動作は私が望むものではありません。テーブルには、データベースのエントリごとに 1 つの行が表示されています。

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 がこれを実行できるかどうか、または独自のテーブルを作成する必要があるかどうかを知っている人はいますか?

4

1 に答える 1

1

あなたの質問は理にかなっていると思います。

まず、すべての列をオーバーライドする必要があるため、ModelTable ではなく通常のテーブルを使用することをお勧めします。

行内のさまざまな種類のデータは、django-tables2 がすぐにサポートするものではないため、ドキュメントにはそれについて何も記載されていません。ただし、目的を達成するために使用できる方法はたくさんあります。

1 つの方法は、1 つの行に date1 - vteam1 - vpitcher1 が含まれ、次の行に空白 - hteam1 - hpitcher1 が含まれるように、テーブルに渡すデータを配置することです。これを行うには、テーブル データを使用して新しいリストを作成し、元のクエリ データのレコードをそこに入れます。この解決策を許可する場合は、並べ替えに細心の注意を払う必要があります。

もう 1 つの簡単な方法は、date1、vteam<br/>hteam1、vpitcher1<br/>hpicher1 を返すようにクエリを作成することです。したがって、これをレンダリングすると、vteam1 と hteam1 が異なる行に表示されます。今はテストできないので、これがうまくいかないようなら、おそらく <br> は安全ではないので、mark_safe で囲まれた値を出力する必要があります。

これを行うには、チームとピッチャーの render_row をオーバーライドして mark_safe(value) を返します (または、値を好きなように出力する新しいクラス TwoRowsColumn を作成します - hteam と vteam の 2 つの行を含む小さな html テーブルを作成することもできます)。 hteam/vteam のセルに出力されます)。ここではソートは簡単ですが、hteam や hpitcher ではソートできません。

他の方法があります-たとえば、必要なことを行うために ModelTable をサブクラス化しますが、要件が非常に具体的であり、他の場所で簡単に再利用できないため、お勧めしません。

于 2013-06-02T13:11:28.817 に答える