Rob*_*b B 3 django django-templates django-models django-views
models.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)
Run Code Online (Sandbox Code Playgroud)
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})
Run Code Online (Sandbox Code Playgroud)
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 %}
Run Code Online (Sandbox Code Playgroud)
只是想知道以上是否是外键查询的最佳实践.我在模板级别进行过滤(如果是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 %}
Run Code Online (Sandbox Code Playgroud)
但是,有一些优化技巧可以减少查询计数,因为您每个循环都在进行查询.我现在想想一个.
实际上,我开始认为这是一个有趣的问题:最佳实践?
您的方法使用2个查询.我的方法是使用django实践,但会进行多次查询.
为了防止多个查询,你基本上必须在视图中执行与模板相同的操作,即迭代SubCatergory,在python中提取ID并将每个ID集分组到属性上Category.
我不知道这个问题的答案.
| 归档时间: |
|
| 查看次数: |
2565 次 |
| 最近记录: |