我的数据库有以下模式:
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
有很多Tag
S和一个Product
有很多AlternatePartNumber
秒。 Tag
s为的属性的集合Product
。
鉴于在三个属性Tag
,我想选择相关的Product
相匹配的S(可能不止一个),以及所有的AlternatePartNumber
每个产品的秒。
目前,我这样做:
# 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...
而且帮助一些,但它并没有帮助不够。