gpt4 book ai didi

python - Django - 查询集拆分为 4,对数据库造成大量命中

转载 作者:行者123 更新时间:2023-11-28 22:52:52 25 4
gpt4 key购买 nike

这是我的模板标签:

@register.filter
def split_to_4_columns(queryset):
split = int(ceil(queryset.count()/4.))
columns = list()
for i in range(4):
columns.append(queryset[i*split:(i+1)*split])
return columns

这是我在模板中的伪用法:

{% for column in queryset|split_to_4_columns %}
<div class="list">
{% for object in column %}
<a href="{{ object.get_absolute_url }}" class="item">{{ object }}</a>
{% endfor %}
</div>
{% endfor %}

它基本上将我的长查询集(几百个对象)分成 4 列,以便更好地展示 html。但它似乎也对我的数据库造成了沉重打击。首先它评估完整的查询集,然后每一列都有自己的评估,我该如何优化它?

我正在使用缓存,但我仍然想知道如何在比缓存更低的级别上对其进行优化。

最佳答案

在处理所有数据时,必须处理至少一个返回所有数据的select。要查询一次数据,您可以在第一步请求所有数据(评估查询集),然后在第二步用纯 python 拆分它(不访问数据库):

@register.filter
def split_to_4_columns(queryset):
values = list(queryset.all())
split = int(ceil(len(values)/4.))
columns = [values[i*split:(i+1)*split] for i in range(4)]
return columns

关于python - Django - 查询集拆分为 4,对数据库造成大量命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20029420/

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