我有三個通過m2m關係連接的模型。 Stop代表公共汽車站,Route代表公交車路線,並且RouteStation是將停靠點和路線連接到彼此的中間模型,並提供有關停靠點在路線上的位置的信息(RouteStation.order)。根據django中的條件查找公共元素
class Stop(models.Model):
lat = models.FloatField()
lon = models.FloatField()
name = models.CharField(max_length=250, blank=True, default="None")
stop_id = models.IntegerField(unique=True)
class Route(models.Model):
route_id = models.CharField(max_length=20)
journey_pattern = models.CharField(max_length=20)
stops = models.ManyToManyField(Stop, through="RouteStation")
class RouteStation(models.Model):
stop = models.ForeignKey(Stop, on_delete=models.CASCADE)
route = models.ForeignKey(Route, on_delete=models.CASCADE)
order = models.IntegerField()
考慮到兩站路,我需要返回包含常見的兩種停止,其中RouteStation.order的值是第二站比第一高的所有路由的查詢集。這種情況可確保通過該路線上的第一站可以訪問第二站。
我可以使用下面找到常見站:
stop1 = Stop.objects.get(stop_id=origin)
stop2 = Stop.objects.get(stop_id=destination)
routes1 = stop1.route_set.all()
routes2 = stop2.route_set.all()
common = routes1 & routes2
但是我無法過濾此基礎上RouteStation.order值。有沒有人知道去做這件事的最好方法?
??那麼你需要Route中的stops字段嗎?多對多由RouteStation模型實施 – mbieren
這是一個專業的網站嗎?你是否被聘請爲一些公共交通服務製作一個真實的網站,或者你是在「搞亂」?無論哪種方式,我都強烈建議查看「Dijkstra的算法」,並花費大量時間思考和理解主題。當這需要適當地處理它的某些QueryFiltering沒有完成時,您需要構建一個大規模算法。當你爲自己做這件事時,喜歡併發布我想看到的結果:D。如果你做這個廣告,我會建議購買一個令人興奮的項目並實施它。 – hansTheFranz
@hansTheFranz這是一個大學項目。我們正在構建一個公共交通應用程序,並對歷史交通數據使用一些簡單的機器學習來改進時間表預測。如果您有興趣,我可以向您發送我的其他代碼! –