模型.py
class Category(models.Model):
name = models.CharField(max_length=50)
class SubCatergory(models.Model):
parent_category = models.ForeignKey(Category)
name = models.CharField(max_length=100)
views.py
def all_products(request):
c = Category.objects.all()
s = SubCatergory.objects.all()
return render_to_response('all_products.html',
{'c':c, 's':s})
all_products.html
{% for category in c %}
<h1>{{ category.name }}</h1>
<ul>
{% for sub in s %}
{% if category.id == sub.parent_category.id %}
<li>{{ sub.name }}</li>
{% endif %}
{% endfor %}
</ul>
{% endfor %}
只是想知道上述是否是外键查询的最佳实践。我正在模板级别进行过滤(如果category.id == sub...),我应该将其移至模型或视图级别吗?
如果子类别只有一种深度,则以下代码应该不会有问题:
{% for category in c %}
<h1>{{ category.name }}</h1>
<ul>
{% for sub in category.subcatergory_set.all %}
<li>{{ sub.name }}</li>
{% endfor %}
</ul>
{% endfor %}
但是有一些优化技巧可以减少查询计数,因为您将在每个循环中执行一个查询。我现在正在想一个。
实际上,我开始认为这是一个有趣的问题:最佳实践?
您的方法使用 2 个查询。我的方法是使用 django 实践,但执行多个查询。
为了防止多次查询,您基本上必须在视图中的模板中执行相同的操作,即迭代SubCatergory
,在 python 中提取它们的 ID 并将每个 ID 集分组到属性上Category
.
我不知道这个问题的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)