使用类别和子类别优化Django中的数据库查询

2024-09-26 18:19:16 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的函数获取所有类别和子类别,然后将它们传递给模板。基本上topcategory有category id = 1——所以我们得到任何以top category为父类别的类别,然后得到它们的子类别。问题是我们有大约90个基于此代码的查询。我想知道是否有人可以建议一种更有效的方式来呈现这些信息并减少数据库调用的数量?你知道吗

def all_models(request):
    topcats = Category.objects.filter(parent=1).order_by('category')
    subcats = {}
    for each in topcats:
        subcats [each] = []
        subcategories = Category.objects.filter (parent= each.id).order_by('category')
        for subcat in subcategories:
            subcats[each].append(subcat)
    return render_to_response("parts/all.html", {
        "topcats":topcats,
        "subcats": subcats,
    }, context_instance=RequestContext(request))

Tags: idforbyobjectsrequestorderallfilter
1条回答
网友
1楼 · 发布于 2024-09-26 18:19:16
topcats = Category.objects.prefetch_related('category_set').filter(parent_id=1).order_by('category')

如果在模型中为parent指定了一个related_name,那么当然应该用该名称替换category_set。你知道吗

这将在两个查询中获取所有需要的类别。您可能需要在模型本身上定义排序,或者无法按子类别的category排序。然后,在模板中,您可以执行以下操作:

{% for topcat in topcats %}
    - {{ topcat.category }}
    {% for subcat in topcat.category_set.all %}
          {{ subcat.category }}
    {% endfor %}
{% endfor %}

相关问题 更多 >

    热门问题