2017-03-24 2 views
0

Ich möchte ein Modell eines Gutes für einen Online-Shop erstellen. Das Modell sollte eine Anzahl von Bildern enthalten. Ich habe zwei Ansätze, das zu tun:django Liste der Bilder

1)

class Good(models.Model): 
    ... 

class Img(models.Model): 
    img = models.ImageField(... 
    good = models.ForeignKey("Good", ... 

2)

class Good(models.Model): 
    img = models.ForeignKey('ChainImg', ... 

class ChainImg(models.Model): 
    img = models.ImageField(... 
    anotherimg = models.ForeignKey("ChainImg", ... 

wie ich verstehen Sie alle Bilder für einen guten bekommen:

bei 1) Zeilen in der Tabelle "Img" werden nach der ID des Gutes gefiltert, und wenn ich 100 Waren habe, wird die Tabelle 100 Mal für 100 verschiedene IDs gefiltert.

im Fall von 2) Wenn ein durchschnittliches Gut 10 Bilder verkettet hat, wird die "Img" -Tabelle 10 Mal abgefragt, um 10 Reihen mit ihren IDs zurückzugeben. So wird bei 100 Waren "Img" -Tabelle etwa 1000 mal nach IDs abgefragt, aber keine Filterung nötig. ChainImg könnte auch auf sich selbst hinweisen und ein Problem verursachen. aber das kann vermieden werden.

Welcher Ansatz wäre besser? Schneller? Effizienter? Richtig?

Antwort

1

Erste Annäherung ist in dieser Situation die richtige.

Im ersten Fall können Sie eine einfache Schleife for image in good.images: do something Anweisung haben.

Im zweiten Fall müssen Sie mehrere Nachschlagevorgänge in derselben Tabelle durchführen, was eine Schleife erfordert, um mehrere JOINs in derselben Tabelle auszuführen, was eine unnötige Komplikation darstellt.