我在网页查询中遇到问题,索引页显示5行,具有5种不同的类别,我的表看起来像这样
models.py
class Post(models.Models):
....
categories = M2M(Category, ...)
author = FK(author, ...)
status = CharField(Choices=STATUS)
views.py 在这里,我将提取数据的方式发送给模板
queryset_global = Post.objects.filter(status__contains='publish').prefetch_related('categories').select_related('author')
根据我的说法,我缓存了查询,以便稍后过滤我的类别而不访问数据库
news_cat1 = queryset_global.filter(categories__slug__contains="cat1_name").order_by('-date')[:5]
news_cat2 = queryset_global.filter(categories__slug__contains="cat2_name").order_by('-date')[:5]
news_cat3 = queryset_global.filter(categories__slug__contains="cat3_name").order_by('-date')[:5]
news_cat4 = queryset_global.filter(categories__slug__contains="cat4_name").order_by('-date')[:5]
news_cat5 = queryset_global.filter(categories__slug__contains="cat5_name").order_by('-date')[:5]
我检索了25条帖子以在索引页中显示
根据调试工具栏生成SQL 2599.59毫秒(44个查询,包括34个重复项)
但是当我在模板中循环播放它们时,它会大大增加
index.html模板中的5个时间循环
{% for news1 in news_cat1 %}
{{news.title}}
{{newa.date|date:'Y-m-d'}}
{{news.body|safe|truncatewords:20}}
{{news.category.all.0}}
<a href="{{news.get_absolute_url}}">Read More</a>
{% endfor %}
...
{% for news5 in news_cat5 %}
....
{% endfor %}
根据调试工具栏生成SQL 3463.65毫秒(86个查询,包括77个重复项)
为什么调试工具栏会说N个重复项并显示更多查询,而如果我显示更多类别,则会增加更多查询。
我该如何改善或优化这些查询,它们过于密集并且调试工具栏告诉我有重复项,这意味着有人可以向我解释