Как сделать INNER JOIN для другого набора запросов / запроса - PullRequest
2 голосов
/ 05 июля 2019

У меня проблема с Django ORM. У меня есть модель Погода:

    class Weather(models.Model):
        city = models.ForeignKey(City, verbose_name='Город', on_delete=models.CASCADE)
        temperature = models.FloatField('Температура')
        source = models.CharField('Источник', max_length=100)
        date = models.DateTimeField('Дата и время')

Я хочу получить фактическую погоду из каждого источника для каждого города. Я создал SQL-запрос для этого, но я не понимаю, как это сделать с Django ORM.

Запрос:

SELECT * FROM api_weather t1 INNER JOIN
(
    SELECT MAX(date) AS latest_date, city_id, source FROM api_weather WHERE date<='2019-07-04 15:50' GROUP BY city_id, source
) t2
ON t1.city_id = t2.city_id AND t1.source = t2.source AND t1.date = t2.latest_date

Я понял, как это сделать

SELECT MAX(date) AS latest_date, city_id, source FROM api_weather WHERE date<='2019-07-04 15:50' GROUP BY city_id, source

с Django ORM, это

Weather.objects.filter(date__lte=datetime.datetime.now()).values('city_id', 'source').annotate(latest_date=Max('date'))

но я не понимаю, как сделать INNER JOIN из модели Weather для этого запроса.

1 Ответ

0 голосов
/ 05 июля 2019
Weather.objects.values('city', 'source', 'temperature').annotate(latest_date=Max('date'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...