【发布时间】:2012-05-06 12:18:15
【问题描述】:
我的数据库具有以下架构:
class Product(models.Model):
pass
class Tag(models.Model):
product = models.ForeignKey(Product)
attr1 = models.CharField()
attr2 = models.CharField()
attr3 = models.CharField()
class AlternatePartNumber(models.Model):
product = models.ForeignKey(Product)
换句话说,Product 有很多 Tags,Product 有很多 AlternatePartNumbers。 Tags 是Product 的属性集合。
鉴于Tag 中的三个属性,我想选择匹配的关联Products(可能不止一个),以及每个产品的所有AlternatePartNumbers。
目前我这样做:
# views.py
results = Tag.objects.
filter(attr1=attr1).
filter(attr2=attr2).
filter(attr3=attr3)
# a template
{% for result in results %}
{% for alternate in result.product.alternatepartnumber_set.all %}
{{ alternate.property }}
{% endfor %}
{% endfor %}
这可以运行数千个查询,具体取决于匹配的数量。有没有好的方法来优化这个?我尝试使用Tag.objects.select_related().filter...,这对一些人有所帮助,但还不够。
【问题讨论】:
标签: python django django-models query-optimization django-orm