2016-06-28 6 views
0

Ich habe 2 Modelle:Optimierung Django Many-to-Many-Abfrage mit benutzerdefinierten durch Tabelle

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

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

class ModelB: 
    whatever = models.CharField() 

Ich möchte eine Funktion in ModelA implementieren, die alle Werte von fieldA in der durch Tabelle drucken würde. Die aktuelle Implementierung der Funktion foobar tut, was ich gerade brauche, aber ich denke, es ist ziemlich ineffizient. Gibt es einen besseren Weg, dies zu tun? Vielen Dank.

+0

Was hält Sie für ineffizient? –

+0

Ich benutzte 'debug_toolbar', um die Anzahl der SQL-Abfragen zu zählen, und es war weit über die Anzahl der vorhandenen Datensätze, was mich dazu brachte zu glauben, dass diese Funktion der Schuldige ist. – 7ball

Antwort

1

Ich sehe nichts ineffizientes über diese Abfrage, Sie müssen Ihr Problem genauer debuggen.

Das heißt, Sie können die gleiche Sache einfacher (und ebenso effizient) erreichen, indem Sie nur einen verwandten Namen in der durchgehenden Tabelle verwenden.

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) 
Verwandte Themen