Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django models order_by non db field

I have this model:

class Foo(models.Model):
    foo_id = models.IntegerField()
    foo_old_prize = models.FloatField()
    foo_new_prize = models.FloatField()

def get_dif(self):
    return self.foo_old_prize  - self.foo_new_prize

Is there some trick how to do this Foo.objects.all().order_by('get_dif') ?

Thx

like image 995
PasikCz Avatar asked Nov 21 '25 01:11

PasikCz


2 Answers

Look into the extra Django queryset operator:

q = Foo.objects.extra(select={'dif': 'foo_old_prize - foo_new_prize'})
q = q.extra(order_by = ['dif'])
like image 107
Joseph Victor Zammit Avatar answered Nov 24 '25 09:11

Joseph Victor Zammit


You can use extra for this:

Foo.objects.extra(
    select={'diff':'foo_old_prize - foo_new_prize'},
    order_by=('diff',)
)
like image 27
rafek Avatar answered Nov 24 '25 10:11

rafek



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!