1

ユーザーがすべての列で並べ替え、検索、フィルタリングできるリーダーボードテーブルを作成するために、django-tables2をいじってみました。私は特別なことは何もしておらず、django-tables2のドキュメントに従っているだけです。

モデルでは次のようになります。

class LeaderboardTable(tables.Table):
    rank = tables.TemplateColumn('{{ record.rank }}')
    name = tables.TemplateColumn('{{ record.user__first_name }} {{ record.user__last_name }}')
    team = tables.TemplateColumn('{{ record.team }}')
    points = tables.TemplateColumn('{{ record.points }}')

ビューでは次のように表示されます。

def get_leaderboard(request):
    table = LeaderboardTable(Profiles.objects.select_related().all())
    RequestConfig(request).configure(table)
    return render(request, 'leaderboard.html', {'table': table})

上記のコードを見ると、名前の列が正しくないことに気付くでしょう。クエリセットのフィールドに結合する場合の並べ替え方法がわからないためです。これに答えることができれば、それも素晴らしいことです。

django-tables2がテーブルの作成とページ付けを処理するのが好きです。ただし、sort / nextまたはprevページを押すたびに、ページが更新されます。これを抑制する方法はありますか?また、10,000レコードを返すかどうかはわかりませんが、django-tables2の並べ替えとページングは​​かなり遅いようです。

私はこれに正しいアプリを使用していますか?あなたたちは私が何か他のものを使うべきだと思いますか?

4

2 に答える 2

1

django-tables2は、JavaScriptを使用して、ページを更新せずに並べ替え/ページ付けを行うことをサポートしていません(現時点では)

10kレコードを返すことに問題はないはずです。django-debug-toolbarのようなものを使用して、どのクエリの実行が遅いかを確認することをお勧めします(たとえば、select_related()呼び出しが機能していない可能性があります)。

テーブルを次のように書き直すことができます。

class LeaderboardTable(tables.Table):
    rank = tables.Column()
    name = tables.Column(order_by=("first_name", "last_name"))
    team = tables.Column()
    points = tables.Column()

    def render_name(self, record):
        return u"%s %s" % (record.user.first_name, record.user.last_name)

render_nameを使用してパフォーマンスの問題が解決するかどうかを確認してください。を使用するよりも高速である必要がありますTemplateColumnが、これは、テーブルの各ページに膨大な数の行をレンダリングする場合にのみ重要です。

于 2012-06-25T21:36:34.220 に答える
0

このような数のアイテムをテーブルに配置し、ページ全体を更新せずにテーブルを並べ替えることができるようにするには、jsonデータを入力として受け取るjavascriptライブラリであるSlickGridを使用することをお勧めします。

クエリセットをjsonvarにダンプして、テンプレートに渡すだけです。

于 2014-05-30T16:57:23.577 に答える