Приветствую!
Есть модель для маршрута, в которой указаны название маршрута, начальный, конечный пункты и время в пути.
class Bus(models.Model):
name = models.CharField(max_length=50, verbose_name = 'Маршрут', unique=True)
from_city = models.ForeignKey(City, verbose_name='Откуда', on_delete=models.CASCADE, related_name="from_city")
to_city = models.ForeignKey(City, verbose_name='Куда', on_delete=models.CASCADE, related_name="to_city")
travel_time = models.IntegerField(verbose_name='Время в пути')
Т.е. по факту, совокупность всех этих маршрутов - это направленный граф, и нужно найти путь между пунктом А и каким нибудь пунктом Х. Для того, чтобы можно было применить какой либо алгоритм поиска, на основании этих маршрутов, необходимо получить из БД , пригодную для дальнейшего использования инфу, на подобии этой
{
'A': ['B'],
'B': ['A', 'C', 'D'],
'C': ['A'],
'D': ['E', 'A'],
'E': ['Х']
}
Поскольку информация в БД по маршрутам хранится в виде строк, то чтобы построить подобный словарь, нужно при каждом запросе на поиск маршрута, обращаться к БД за всем списком и строить словарь, что может занимать достаточное количество времени. Я пока не придумал ничего лучше, чем создать доп. таблицу, в которую записывать все связи, для каждого пункта, т.е. по факту повторить вышеозначенный словарь в таблице. И чтобы при сохранении нового маршрута, обновлялись данные в этой таблице.
Но это идея, которую я пока не знаю как реализовать. Может кто может подсказать, куда копать? Нужно ли создавать новую модель и что в ней прописать в качестве полей? Или может, что то добавить к таблице с описанием Городов? Как обновлять данные в этой таблице, при внесении записей в таблицу с маршрутами, не используя сигналы?
Буду весьма признательным за подсказки!!
Updated 28 Feb. 2018, 17:16 by oleg_n.