2015-07-24 18 views
6

Ich habe ein Route Modell, das eine geordnete Liste von Stopps entlang dieser Route speichern sollte. Wie soll ich diese Beziehung modellieren?Django Modellfeld: Geordnete Liste der Fremdschlüssel

class Stop(models.Model): 
    name = .. 
    latitude = .. 
    longitude = .. 

class Route(models.Model): 
    stops_list = # Ordered list of stops on the route 

Antwort

2

Da es viele Stopps entlang einer Strecke sind und Anschläge auf mehrere Routen gehören könnte, würde ich eine ManyToMany verwenden diese Beziehung zu speichern. Sie können ein through Modell angeben, um Daten über die Beziehung zu speichern, z. B. wann die Route voraussichtlich an dieser Haltestelle eintreffen wird. Es gibt viele Optionen zum Hinzufügen von Bestellinformationen. Eine naive Art wäre, ein Integer-Order-Feld wie unten zu haben, oder Sie könnten Order Implity über arrival_time speichern. Wenn sich diese Routen nicht häufig ändern, ist IntegerField keine schreckliche Implementierung. Wenn sie sich jedoch häufig ändern, müssten Sie die Felder aktualisieren .... nicht ideal.

class Stop(models.Model): 
    name = .. 
    latitude = .. 
    longitude = .. 

class Route(models.Model): 
    stops_list = models.ManytoManyField(Stop, through='StopInfo') # Ordered list of stops on the route 

class StopInfo(models.Model): 
    """ Model for storing data about the Stop/Route relationship """ 
    stop = models.ForeignKey(Stop) 
    route = models.ForeignKey(Route) 
    arrival_time = models.DateTimeField(auto_now_add=True) 
    order = models.PositiveIntegerField() 
+0

Auf welche anderen Arten können die bestellten Informationen abgesehen von der obigen naiven Art gespeichert werden? – anon