私のデータベースには次のスキーマがあります。
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
は、 の属性のコレクションですProduct
。
の 3 つの属性を指定して、一致する (複数の場合もある)関連付けられたと、各製品のすべてのTag
を選択したいと考えています。Product
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...
してみましたが、ある程度は役に立ちましたが、十分には役に立ちませんでした。