2016-06-28 26 views
0

でカスタムを持つクエリ私は2つのモデルがあります:最適化Djangoの多対多のテーブル

class ModelA: 
    fieldA = models.ManyToManyField(ModelB, through="CustomThroughTable") 

    def foobar(self): 
     return self.fieldA.through.objects.filter(fieldA=self) 

class ModelB: 
    whatever = models.CharField() 

私が通じテーブルにfieldAのすべての値をプリントアウトしますModelAで機能を実装したいです。 foobarの機能の現在の実装は、私が今必要としていることを行いますが、それはむしろ非効率です。これを行うより良い方法はありますか?ありがとう。

+0

あなたはそれが非効率的だと思いますか? –

+0

私は 'debug_toolbar'を使ってSQLクエリの数を数えました。これは既存のレコードの数を超えていたので、この関数が原因と考えることができました。 – 7ball

答えて

1

私はそのクエリに関して何か非効率的ではないと思うので、問題をより正確にデバッグする必要があります。

つまり、スルーテーブルで関連する名前を使用するだけで、同じことをより簡単に(同じ効率で)達成できます。

class ModelA(models.Model): 
    fieldA = models.ManyToManyField(ModelB, through="CustomThroughTable") 

class ModelB(models.Model): 
    whatever = models.CharField() 

class CustomThroughTable(models.Model): 
    modela = models.ForeignKey(ModelA, related_name="foobar") 
    modelb = models.ForeignKey(ModelB) 
関連する問題