我的数据库具有以下架构:
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)
换句话说,aProduct
有很多Tag
s,aProduct
有很多AlternatePartNumber
s。 Tag
s 是 的属性的集合Product
。
给定 a 中的三个属性Tag
,我想选择Product
匹配的关联 s(可能不止一个),以及AlternatePartNumber
每个产品的所有 s。
目前我这样做:
# 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...
并帮助了一些,但它没有足够的帮助。