2011-08-19 12 views
5

Próbuję przetłumaczyć zapytanie sql w ORM django. Próbowałem użyć adnotate(), ale nie udało mi się uzyskać takich samych wyników niż zapytanie sql.Jak używać funkcji django adnotate() i aggregate() do grupowania zestawu zapytań?

To jest mój model:

class Fuel(models.Model): 
    type = models.CharField(max_length=150) 

class Station(models.Model): 
    name = models.CharField(max_length=150, null=True) 

class Price(models.Model): 
    fuel_type = models.ForeignKey(Fuel) 
    station = models.ForeignKey(Station) 
    price = models.FloatField() 
    date = models.DateTimeField('Date', auto_now_add=True) 

I to jest kwerenda staram się tłumaczyć w Django:

select * from myapp_price where id IN ((select max(id) from myapp_price where station_id=121600 group by fuel_type_id)); 

Czy to możliwe?

Odpowiedz

4

uzyskać oczekiwane rezultaty w ten sposób:

q=Price.objects.filter(station=filters['station_id']).values('fuel_type').annotate(Max('id')).values('id__max') 
Price.objects.filter(pk__in=q) 
+0

dziękuję @orgoz, wczoraj sprawdziłem swoją odpowiedź, ale pomijane .values ​​(„id__max”) od pierwszego zapytania, to rozwiązać mój problem :) –

Powiązane problemy