Django使用外键查询的最佳实践
发布时间:2020-12-20 11:17:16 所属栏目:Python 来源:网络整理
导读: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) views.py def all_products(request):c = Ca
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) 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上的属性上. 我不知道这个问题的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |