gpt4 book ai didi

python - django-tables2 刷新排序和页面更改

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:32 25 4
gpt4 key购买 nike

我尝试使用 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 }}')

这是 View 中的样子:

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

如果您查看上面的代码,您可能会注意到名称列不正确,因为我还没有弄清楚如果我组合到查询集中的字段如何排序 - 如果您也可以回答这个问题很棒。

我喜欢 django-tables2 处理表的创建和分页;但是,每次我点击排序/下一页或上一页时,都会导致页面刷新。有办法抑制这种情况吗?另外,我不知道是否是因为我返回了 10,000 条记录,但 django-tables2 在排序和分页方面似乎相当慢。

我使用的应用程序是否正确?你们认为我应该使用其他东西吗?

最佳答案

django-tables2 支持使用 JavaScript 在不刷新页面的情况下进行排序/分页(目前)。

返回 10k 条记录应该没有问题。我建议你使用类似 django-debug-toolbar 的东西查看哪些查询执行速度较慢(例如,您的 select_lated() 调用可能无法正常工作)。

您可以将表格重写为:

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 更快,但是只有当您在表格的每一页中呈现大量行时,这才有意义。

关于python - django-tables2 刷新排序和页面更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com