Webapp для общественного транспорта в DJANGO : модели (отношения "многие-ко-многим") для транспортных систем и маршрутов
Мне нужно сделать веб-приложение, которое позволило бы пользовательской базе создавать оповещения о диспетчерах в общественном транспорте в большом городе. В основном это будут поезда и автобусы.
Я совсем запутался в том, как создать модель. Я уже создал Alert, который имеет атрибут станции с отношением один-к-одному, а также атрибут линии. У меня есть две модели: модель Станция и модель Линия.
Сейчас каждый вид транспорта (автобус/поезд) имеет линию, станции и расписание. Я использовал поля "многие ко многим" в модели Line, но я не знаю, как упорядочить станции, так как автобус должен проходить через каждую станцию упорядоченно, и как связать это с расписанием. Я думал о создании другой модели "Line_Station" с каждым экземпляром, имеющим атрибуты Line, Station и Order, но это не кажется оптимальным для маршрутов, имеющих много станций, поскольку маршрут будет каждым экземпляром Line_Station для одного и того же атрибута Line. Я новичок в Django и еще не имел возможности работать с отношениями базы данных, но мне кажется, что эту проблему можно решить с помощью отношений "многие-ко-многим".
(Transportations/models.py)
class Station(models.Model):
Station_name = models.CharField(max_length=200)
Station_adress = models.CharField(max_length=300)
Station_vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE)
class Line(models.Model):
Line_number = models.PositiveIntegerField(validators=[MinValueValidator(1), MaxValueValidator(100)])
Line_name = models.CharField(max_length=200, blank=True, null=True)
Line_vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE)
Line_stations = models.ManyToManyField(Station)
class Line_station(models.Model):
line = models.ForeignKey(Line, on_delete=models.CASCADE)
station = models.ForeignKey(Station, on_delete=models.CASCADE)
order = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(60)])
Есть ли более оптимальный способ решения этой проблемы? Дело в том, что я хотел бы создавать линии в моем django admin и оттуда добавлять станции и выбирать порядок. Если я думаю, что это приложение привлечет много пользователей, мне кажется, что создание еще двух моделей (маршруты и расписания) может создать слишком много запросов
Вот модель Alert, если она представляет интерес :
(Alerts/models.py)
class Alert(models.Model):
alert_whistleblower = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
alert_timestamp = models.DateTimeField(auto_now_add=True)
alert_station = models.ForeignKey(Station, on_delete=models.CASCADE)
alert_line = models.ForeignKey(Line, on_delete=models.CASCADE)
alert_remarks = models.TextField(blank=True, null=True)
def get_absolute_url(self):
return reverse('alerts:detail', kwargs={'pk':self.pk})
На данный момент я использовал отношение Many-to-Many на модели Line, используя through = 'routes'.
class Line(models.Model):
Line_number = models.PositiveIntegerField(validators=[MinValueValidator(1), MaxValueValidator(100)])
Line_stations = models.ManyToManyField(Station, through="Route")
class Route(models.Model):
line = models.ForeignKey(Line, on_delete=models.CASCADE)
station = models.ForeignKey(Station, on_delete=models.CASCADE)
order = models.IntegerField()
Я все еще не уверен в этом. Должно ли поле "многие-ко-многим" быть у Station ? Должно ли оно быть у обоих? Я все еще не знаю, как сделать модель расписания поверх этого. Упорядочивание каждого экземпляра Route, кстати, довольно болезненное занятие, поскольку я хочу, чтобы оно автоматически инкрементировалось для экземпляра линии.