5

I am trying to translate a sql query in django's ORM. Tried to use annotate() but I don't manage to get same results than the sql query.

This is my 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)

And this is the query I try to translate in django :

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

Is this possible ?

1 Answer 1

4

I get the expected results this way :

q=Price.objects.filter(station=filters['station_id']).values('fuel_type').annotate(Max('id')).values('id__max')
Price.objects.filter(pk__in=q)
Sign up to request clarification or add additional context in comments.

1 Comment

thanks a lot @orgoz, yesterday I checked your answer but I skipped .values('id__max') from first query, this solved my problem :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.