У меня проблема с 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 для этого запроса.