Django: Order_By Multiple Fields

Django: Order_By Multiple Fields

I am getting order_by fields in the form of a list. I want to order_by by multiple fields with django orm. List is like below:

orderbyList = ['check-in','check-out','location']

I am writing a query is like:

modelclassinstance.objects.all().order_by(*orderbyList)

Everything i am expecting in a list is dynamic. I don't have predifined set of data.Could some tell me how to write a django ORM with this?

6 Answers

Try something like this

modelclassinstance.objects.order_by('check-in', 'check-out', 'location')

You don't need .all() for this

You can also define ordering in your model class

something like

class Meta:
       ordering = ['check-in', 'check-out', 'location']
1

Pass orders list in query parameters

eg : yourdomain/?order=location&order=check-out

default_order = ['check-in']  #default order
order = request.GET.getlist('order', default_order)
modelclassinstance.objects.all().order_by(*orderbyList)

You should pass a list of stringified arguments of the database table columns (as specified by your ORM in the respective models.py file) to the .order_by() method on the return query set like so. shifts = Shift.objects.order_by('start_time', 'employee_first_name'). By notation,.order_by(**args), will help you remember that takes an arbitrary number of arguments.

modelclassinstance.objects.filter(anyfield='value').order_by('check-in', 'check-out', 'location')

1

Try this:

listOfInstance = modelclassinstance.objects.all()

for askedOrder in orderbyList:
    listOfInstance = listOfInstance.order_by(askedOrder)
3

What you have to do is chain the querySets, in other words:

classExample.objects.all().order_by(field1).order_by(field2)...
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Robert Thorne
Author

Robert Thorne

Robert Thorne covers electric vehicle innovations, autonomous driving systems, global mobility trends, and automotive engineering developments.