2015-07-24 30 views
6

Posiadam model Route, który powinien przechowywać uporządkowaną listę przystanków wzdłuż tej trasy. W jaki sposób mam przystąpić do modelowania tej relacji?Pole modelu Django: uporządkowana lista kluczy zagranicznych

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

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

Odpowiedz

2

Ponieważ istnieje wiele przystanków wzdłuż trasy i przystanki może należeć do wielu tras, chciałbym użyć ManyToMany przechowywać tę zależność. Możesz określić model through, aby przechowywać dane dotyczące relacji, na przykład o tym, kiedy trasa ma dotrzeć do tego przystanku. Istnieje wiele opcji dodawania informacji o zamówieniu. Jednym z naiwnych sposobów byłoby posiadanie pola zamówienia Integer, jak poniżej, lub możesz zachować implikację zamówienia przez czas przyjazdu. Jeśli te trasy nie zmieniają się często, IntegerField nie jest straszną implementacją. Jeśli jednak często się zmieniają, musisz zaktualizować pola .... nie jest to idealne rozwiązanie.

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

Jakie są inne sposoby przechowywania zamówionych informacji poza powyższym naiwnym sposobem? – anon