Frage

Ich habe eine viel zu viel Beziehungstabelle whith einige Daten in der Verbindungsbasis

eine Basisversion meines Modells wie folgt aussehen:

class FooLine(models.Model):
    name = models.CharField(max_length=255)

class FooCol(models.Model):
    name = models.CharField(max_length=255)

class FooVal(models.Model):
    value = models.CharField(max_length=255)
    line = models.ForeignKey(FooLine)
    col = models.ForeignKey(FooCol)

Ich versuche, alle Werte für eine bestimmte Zeile mit einem Null zu suchen, wenn der Wert nicht vorhanden ist (im Grunde versuche ich, die fooval Tabelle mit Nullwerten für Werte angezeigt werden, die nicht gefüllt) eine typische SQL wäre

SELECT value FROM FooCol LEFT OUTER JOIN 
  (FooVal JOIN FooLine 
  ON FooVal.line_id == FooLine.id AND FooLine.name = "FIXME") 
ON FooCol.id = col_id;

Gibt es eine Möglichkeit über Abfrage mit django Modell modelise

Danke

War es hilfreich?

Lösung

Outer-Joins kann als Hack angesehen werden, da SQL fehlt "Navigation".

Was Sie haben, ist eine einfache if-Anweisung Situation.

for line in someRangeOfLines:
    for col in someRangeOfCols:
        try:
            cell= FooVal.objects().get( col = col, line = line )
        except FooVal.DoesNotExist:
            cell= None

Das ist, was eine äußere Verknüpfung wirklich ist -. Ein versuchter Lookup mit einem NULL-Ersatz

Die einzige Optimierung ist so etwas wie die folgenden.

matrix = {}
for f in FooVal.objects().all():
    matrix[(f.line,f.col)] = f

for line in someRangeOfLines:
    for col in someRangeOfCols:
        cell= matrix.get((line,col),None)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top