2011-08-19 59 views
5

Estoy tratando de traducir una consulta sql en el ORM de django. Intenté usar anotación() pero no logro obtener los mismos resultados que la consulta sql.Cómo usar django annotate() y aggregate() para agrupar un queryset?

Esta es mi modelo:

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) 

Y esta es la pregunta que trato de traducir en Django:

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

Es esto posible?

Respuesta

4

puedo obtener los resultados esperados de esta manera:

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

gracias @orgoz mucho, ayer he comprobado su respuesta, pero me he saltado .values ​​('id__max') de la primera consulta, esto solucionó mi problema :) –

Cuestiones relacionadas