python - Django: Using expressions on related fields in extra or order_by -


i need calculate , order expression in django. what's efficient way this?

example setup:

class rating(models.model):     rating = models.integerfield(...)     prev = models.foreignkey('rating') 

i have calculate difference of current rating , previous , order it. have few methods work.

method 1: use extra() add select clause calculates diff. depends on way django labels joined tables in sql query. example:

rating.objects.filter(prev__isnull=false)\         .select_related('prev')\         .extra(select={'diff': 'rating.rating - t3.rating'})\         .order_by('-diff') 

(in case joined table named t3 since have second related field in model)

method 2: add field model.

method 3: sorting in python. inefficient.

what i'd like: being able use f expressions in select clause, so:

rating.objects.filter(prev__isnull=false)\         .extra(select={'diff': f('rating') - f('prev__rating')})\         .order_by('-diff') 

or possibly in order by clause:

rating.objects.filter(prev__isnull=false)\         .order_by(f('rating') - f('prev__rating')) 

this perhaps question better asked django devs want see ideas have.


Comments

Popular posts from this blog

java - WrongTypeOfReturnValue exception thrown when unit testing using mockito -

php - Magento - Deleted Base url key -

android - How to disable Button if EditText is empty ? -