Модель Django с соответствующей погодой для каждой записи - PullRequest
0 голосов
/ 20 мая 2019

У меня есть две модели

class Route(models.Model):
    start_destination = models.CharField(max_length=255)
    end_destination = models.CharField(max_length=255)
    length_in_miles = models.CharField(max_length=255)
    ...

и

class Weather(models.Model):
    name = models.CharField(max_length=255)

Я хочу суммировать все маршруты для данного тура в классе Trip следующим образом:

class Trip(models.Model):
    tripname = models.CharField(max_length=255)
    routes = models.ManyToManyField('Route')

но каждый Маршрут в Модели Поездки должен быть связан с погодой в то время, поэтому Поездка должна выглядеть примерно так:

tripname
routeA weatherA
routeB weatherB
routeC weatherC

, и я не хочу включать Погоду непосредственно в Маршрутпотому что один и тот же маршрут можно проехать дважды, но с другой погодой в другой поездке.

1 Ответ

2 голосов
/ 20 мая 2019

Я думаю, что вы можете использовать связь ManyToMany между Weather и Route моделью с отношением through. Как это:

import datetime

class Trip(models.Model):
    routes = models.ManyToManyField(Weather, through="TripRoute")


class TripRoute(models.Model):
     route = models.ForiegnKey(Route,related_name='weathers', on_delete=models.CASCADE)
     weather = models.ForiegnKey(Weather, related_name='routes', on_delete=models.CASCADE)
     trip = models.ForiegnKey(Trip, related_name='route_trips', on_delete=models.CASCADE)

Теперь вы можете поместить в модель Route функцию для извлечения одного экземпляра Weather, например:

class Route(models.Model):
   ...

   def get_weather(self, date=None):
       if not date:
            date = datetime.date.today()
       return self.weathers.filter(date=date).last().weather

Использование:

trip = Trip.objects.first()
routes = trip.routes.all()
for r in routes:
    r.get_weather()
...