【发布时间】:2016-06-22 03:57:46
【问题描述】:
我在 Django 模板中使用了 related_name 来查看外键记录,并调用 count 方法。因为我有这么多“主”记录,模板内的 for 循环会创建太多对数据库的查询。如果有一种简单的方法可以减少对数据库的查询次数?请参阅下面的设置。
# models.py
class Main(models.Model):
name = models.CharField(_('Name'), max_length=255)
class Sub1(models.Model):
main = models.ForeignKey(Main, on_delete=models.CASCADE)
name = models.CharField(_('Name'), max_length=255)
class Sub2(models.Model):
main = models.ForeignKey(Main, on_delete=models.CASCADE)
name = models.CharField(_('Name'), max_length=255)
class Sub3(models.Model):
main = models.ForeignKey(Main, on_delete=models.CASCADE)
name = models.CharField(_('Name'), max_length=255)
# views.py
def get_main(request):
main_list = Main.objects.all()
...
# template
{% for main in main_list %}
{{main.sub1_set.count}}
{{main.sub2_set.count}}
{{main.sub3_set.count}}
{% endfor %}
【问题讨论】:
-
您可以使用计数值对字段进行注释。 docs.djangoproject.com/en/1.9/topics/db/aggregation/…有一个例子
标签: python django django-models orm