Uważam, że left join może pomóc w tej sytuacji. Twoim celem jest uporządkowanie miast do ostatniego punktu PM.
Zakładając klucz podstawowy Twojego city
tabela to city_id, a osobna tabela o nazwie city_pm
posiada punkty PM i masz dwa modele City i City_Pm...
Twoim zdaniem:
cities = City.objects.all()
W Twoich modelach:
class City(models.Model):
# fields ...
def get_latest_pm(self):
try:
return City_Pm.objects.filter(city_id=self.pk).order_by("-date")[:1].get()
except:
return None
W swoim szablonie:
{% for city in cities %}
{{ city.get_latest_pm }}
{% endfor %}