0
私は3つのモデルを使用しており、N + 1のクエリを避けたいと考えています。与えられたfooのDjango、N + 1クエリを避ける
class Rule(models.Model):
pass
class RuleConstraint(models.Model):
rules = models.ManyToManyField(Rule)
class Foo(models.Model):
rule = models.ForeignKey(Rule, related_name='foos')
、私は
次
RuleContraint.objects.filter(rules__foos=foo)
のような関連RuleConstraintsを得ることができます。質問は、私は私ではなく、単一のfooの
foos
を持つN + 1クエリの症状を、避けるんか、です。あなたが改善することができ
for foo in foos:
rule_constraints = foo.rule.ruleconstraint_set.all()
:
すなわち、
for foo in foos:
rule_constraints = RuleConstraint.objects.filter(rules__foos=foo)
'select_related'メソッドを見ましたか? https://docs.djangoproject.com/en/1.10/ref/models/querysets/#select-related – gpichot